JAVA通过JNI调用本地方法,而本地方法是以库文件的形式存放的(在WINDOWS平台上是DLL文件形式,在UNIX机器上是SO文件形式)。通过调用本地的库文件的内部方法,使JAVA可以实现和本地机器的紧密联系,调用系统级的各接口方法。
1,在eclipse中需要做的事:
创建一个Java工程,如下图:
编写一个类Testdll.java,内容如下:
packagecom.lonsine.www.jni;public classTestdll {static{
System.out.println( System.getProperty("java.library.path"));//当你不知道dll文件放哪里的时候,查看此路径
System.loadLibrary("goodluck");//这是声明类库
}//下面是需要调用的接口方法,具体实现放在C++程序中实现
public native static intget();public native static void set(inti);public static voidmain(String[] args){
Testdll test=newTestdll();
test.set(10);
System.out.println(test.get());
}
}
2,找到编译后生成的Testdll.class 文件的目录的上一目录,在本项目中是F:\eclipse\bendiban\jnidemo\bin这个目录,通过cmd进入到该目录,然后执行javah com.lonsine.www.jni.Testdll如下图所以
表示成功,生成com_lonsine_www_jni_Testdll.h头文件,文件内容如下:
/*DO NOT EDIT THIS FILE - it is machine generated*/#include
/*Header for class com_lonsine_www_jni_Testdll*/#ifndef _Included_com_lonsine_www_jni_Testdll#define _Included_com_lonsine_www_jni_Testdll#ifdef __cplusplusextern "C"{#endif
/** Class: com_lonsine_www_jni_Testdll
* Method: get
* Signature: ()I*/JNIEXPORT jint JNICALL Java_com_lonsine_www_jni_Testdll_get
(JNIEnv*, jclass);/** Class: com_lonsine_www_jni_Testdll
* Method: set
* Signature: (I)V*/JNIEXPORTvoidJNICALL Java_com_lonsine_www_jni_Testdll_set
(JNIEnv*, jclass, jint );
#ifdef __cplusplus
}#endif
#endif
3, 安装时没有把jdk相关的jni头文件加入到VC++6.0的include文件夹中,
Include文件夹中的jni.h、win32下的jawt_md.h、jni_md.h加入到..\VC98\Include目录下,如果已经存在,则不必添加做这步。
4, 使用VC++6.0创建一个名为goodluck.dll的文件
1) 打开VC++6.0,选择File->New->Win32 Dynamic-Link Library 填写你的Location和Project name ,Project name在这里填goodluck,然后点击OK。
2) 将com_lonsine_www_jni_Testdll.h拷贝到goodluck工程文件夹中。
3) 添加源文件goodluck.cpp,内容如下:
/*DO NOT EDIT THIS FILE - it is machine generated*/#include
/*Header for class com_lonsine_www_jni_Testdll*/#ifndef _Included_com_lonsine_www_jni_Testdll#define _Included_com_lonsine_www_jni_Testdll#ifdef __cplusplusextern "C"{#endif
/** Class: com_lonsine_www_jni_Testdll
* Method: get
* Signature: ()I*/JNIEXPORT jint JNICALL Java_com_lonsine_www_jni_Testdll_get
(JNIEnv*, jclass);/** Class: com_lonsine_www_jni_Testdll
* Method: set
* Signature: (I)V*/JNIEXPORTvoidJNICALL Java_com_lonsine_www_jni_Testdll_set
(JNIEnv*, jclass, jint );
#ifdef __cplusplus
}#endif
#endif
4)点击编译成动态库就完成了。
5,把在Debug文件夹中生成的goodluck.dll 文件拷贝到eclispse根目录下,即是System.getProperty("java.library.path");中显示的路径下。运行如下:
这是我自己做的整个过程!