设为首页 加入收藏

TOP

Java如何调用C代码--(Linux下实现Java本地方法)(一)
2014-11-24 07:29:25 来源: 作者: 【 】 浏览:2
Tags:Java 如何 调用 代码 Linux 实现 地方法

一、Java类中声明本地方法,使用native关键字


public class MyNative {
public void showParms(String s, int i, boolean b) {
showParms0(s, i, b);
}
public int hypotenuse(int a, int b) {
return hypotenuse0(a, b);
}
public void setArray(boolean[] ba) {
for (int i = 0; i < ba.length; i++)
ba[i] = true;
setArray0(ba);
}
public void showStrings(String[] sa) {
showStrings0(sa);
}
public String[] getStrings() {
return getStrings0();
}
private native void showParms0(String s, int i, boolean b);
private native int hypotenuse0(int a, int b);
private native void setArray0(boolean[] ba);
private native void showStrings0(String[] sa);
private native String[] getStrings0();
static {
System.loadLibrary("MyNative");
}
public static void main(String[] args) {
MyNative obj = new MyNative();
obj.showParms("Hello", 23, true);
obj.showParms("World", 34, false);
System.out.println(obj.hypotenuse(3, 4));
System.out.println(obj.hypotenuse(9, 12));
boolean[] ba = new boolean[5];
obj.setArray(ba);
for (int i = 0; i < ba.length; i++)
System.out.println(ba[i]);
String[] sa = new String[] { "Hello,", "world!", "JNI", "is", "fun." };
obj.showStrings(sa);
obj.showStrings(obj.getStrings());
}
}



loadLibrary
public static void loadLibrary


(String


libname)Loads the system library specified by the libname argument. The manner in which a library name is mapped to the actual system library is system dependent.
The call System.loadLibrary(name) is effectively equivalent to the call


Runtime.getRuntime().loadLibrary(name) Parameters:
libname - the name of the library.
Throws:
SecurityException - if a security manager exists and its checkLink method doesn't allow loading of the specified dynamic library
UnsatisfiedLinkError - if the library does not exist.
NullPointerException - if libname is null
See Also:
Runtime.loadLibrary(java.lang.String) , SecurityManager.checkLink(java.lang.String)


二、生成.class文件,并使用javah命令,将.class文件生成.h文件


javac MyNative.class
javah -jni MyNative
javac MyNative.class
javah -jni MyNative


生成的.h文件如下


/* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class MyNative */
#ifndef _Included_MyNative
#define _Included_MyNative
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: MyNative
* Method: getStrings0
* Signature: ()[Ljava/lang/String;
*/
JNIEXPORT jobjectArray JNICALL Java_MyNative_getStrings0
(JNIEnv *, jobject);
/*
* Class: MyNative
* Method: showStrings0
* Signature: ([Ljava/lang/String;)V
*/
JNIEXPORT void JNICALL Java_MyNative_showStrings0
(JNIEnv *, jobject, jobjectArray);
/*
* Class: MyNative
* Method: showParms0
* Signature: (Ljava/lang/String;IZ)V
*/
JNIEXPORT void JNICALL Java_MyNative_showParms0
(JNIEnv *, jobject, jstring, jint, jboolean);
/*
* Class: MyNative
* Method: hypotenuse0
* Signature: (II)I
*/
JNIEXPORT jint JNICALL Java_MyNative_hypotenuse0
(JNIEnv *, jobject, jint, jint);
/*
* Class: MyNative
* Method: setArray0
* Signature: ([Z)V
*/
JNIEXPORT void JNICALL Java_MyNative_setArray0
(JNIEnv *, jobject, jbooleanArray);
#ifdef __cplusplus
}
#end

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android jni 找不到cutils/log.h.. 下一篇Android调用堆栈跟踪

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·用 Python 进行数据 (2025-12-25 15:49:09)
·如何学习Python数据 (2025-12-25 15:49:07)
·利用Python进行数据 (2025-12-25 15:49:04)
·Java 学习线路图是怎 (2025-12-25 15:19:15)
·关于 Java 学习,有 (2025-12-25 15:19:12)