在网上找了点资料,但不详细,现在我实现了,就详细的跟大家共享下:
JNI(Java Native Interface)的实现步骤:
(1),用java写一个Native方法:(如下)
------------------------- HelloWorld.java ------------------------------
class HelloWorld{
public native void print();
static{
System.loadLibrary("hello");
}
public static void main(String args[]){
new HelloWorld().print();
}
}
---------------------------------------------------------------------------
(2),在dos下编译javac HelloWorld.java(环境变量要设置好)
(3),在dos下运行javah -jni HelloWorld
(4),这时候生成一个HelloWorld.h文件:(如下)
------------------------- HelloWorld.h ------------------------------
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
---------------------------------------------------------------------------
注意这将这个方法实现了:(如下)
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class HelloWorld */
#ifndef _Included_HelloWorld
#define _Included_HelloWorld
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: HelloWorld
* Method: print
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_HelloWorld_print
(JNIEnv *, jobject)
{
printf("Hello Java Native Method.\n");
}
#ifdef __cplusplus
}
#endif
#endif
---------------------------------------------------------------------------
(5),打开VC++编译器:
点击“新建”--“工程”--“Win32 Dynamic-Link Library”,工程名键入hello.(这里和我们编写的java文件中的System.loadLibrary("hello");所载入的名称要一样),然后一路默认到完成。
然后到“新建”文件“C++ Source File ” 命名HelloWorld将刚才那个实现的方法拷贝到这个cpp文件中。
(6),修改编译器的头文件:
单击“工具”,打开“选项”,如图:
将JDK中的include文件夹和include下的win32加入到include files。(这里是用java提供的jni.h等文件)
(7),单击“组件”--“组件[hello.dll]
(8),将生成的hello.dll拷贝到和HelloWorld.java同一个文件夹下
(9),运行java HelloWorld(简单的JNI就实现了)。