JNI是Java Native Interface的缩写,中文为JAVA本地调用。从Java1.1开始,Java Native Interface(JNI)标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互。JNI一开始是为了本地已编译语言,尤其是C和C++而设计的,但是它并不妨碍你使用其他语言,只要调用约定受支持就可以了。
一、JNI开发程序的一般步骤
1、 编写java中的调用类
2、 用javah生成c/c++原生函数的头文件
3、c/c++中调用需要的其他函数功能,实现原生函数(原则上可以调用任何资源)
4、将项目依赖的所有原生库和资源加入到java项目的java.library.path
5、生成java程序
6、发布java应用和dll库
二、JNI程序开发实例
1、TestHello.java
public class TestHello {
static{
System.out.print(System.getProperty("java.library.path"));
System.loadLibrary("TestHello");
}
public static native void hello(String msg);
public static void main(String[]args){
hello("Hi, Wu Yunmin!");
}
}
编译生成TestHello.class文件。
2、run -> cmd,执行
javah TestHello,生成TestHello.h文件;
3、打开VC6.0,新建工程TestHello
在弹出窗口选择“一个简单的DLL工程”
4、打开项目所在的文件目录,将TestHello.h文件复制到此项目文件目录下。
5、选择VC6.0文件目录栏下的“FileView”选项卡,在Header Files上点击右键,选择Add Files to Folder…。选择TestHello.h文件,点击OK。
6、打开StdAfx.h文件,再最后面添加:
#include <jni.h>
#include "TestHello.h"
7、在TestHello.cpp中添加如下代码:
//方法名命名规则:Java + "_" + java的类名 + "_" + java类下的方法;如:Java_TestHello_hello
JNIEXPORT void JNICALL Java_TestHello_hello(JNIEnv * env, jclass obj, jstring jMsg)
{
const char *strMsgPtr = env->GetStringUTFChars( jMsg , 0);
MessageBox( 0, strMsgPtr,"Message box from VC++ ", 0 );
env->ReleaseStringUTFChars( jMsg, strMsgPtr);
}
8、在VC6.0的菜单上选择Tools-Options…,打开选项对话框。在Directories文件夹,添加上jdk所在文件夹下的include和include\win32文件夹。
点击VC上的菜单项Build-Build All,生成TestHello.dll。
9、将TestHello.dll复制到TestHello.class所在的文件夹下。
10、run -> cmd,执行java TestHello
如有不对之处,请指正。