java 可以通过JNI调用native本地方法,实现对其它非java语言编写的接口(C,C++)的调用。在类当中只需要定义好调用的方法,加载具体实现的动态库。
package studyJNIMain;
public class Main {
static {
System.out.println(System.getProperty("java.library.path"));
System.loadLibrary("test");
}
public static void main(String[] args) {
Main m=new Main();
m.test(1);
}
native public int test(int in);
}
调用步骤如下:
编写生成main.class。其中System.getProperty("java.library.path")是查看JVM可访问的动态库地址,System.loadLibrary("test")是加载将要实现native方法的库。
打开命令行,进入到存放class文件的根目录,使用命令javah -jni studyJNIMain.Main。会生成一个studyJNIMain_Main.h文件。我们的test方法变成了JNIEXPORT jint JNICALL Java_studyJNIMain_Main_test(JNIEnv *, jobject, jint); /* DO NOT EDIT THIS FILE - it is machine generated */
#include
/* Header for class studyJNIMain_Main */
#ifndef _Included_studyJNIMain_Main
#define _Included_studyJNIMain_Main
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: studyJNIMain_Main
* Method: test
* Signature: (I)I
*/
JNIEXPORT jint JNICALL Java_studyJNIMain_Main_test
(JNIEnv *, jobject, jint);
#ifdef __cplusplus
}
#endif
#endif
3.利用vc编写test.dll。选择new->projects(选择Win32 Dynamic-Link Library)->OK->An ampty DLL project->Finish。
4.把studyJNIMain_Main.h加载到项目当中,创建test.cpp包含studyJNIMain_Main.h头文件,实现JNICALL Java_studyJNIMain_Main_test(JNIEnv *, jobject, jint);方法就行了,编译生成动态库test.dll。
5.把test.dll放在System.getProperty("java.library.path")获取的地址当中,运行mian。