简单JNI例子示例功能:JAVA程序通过调用C语言编写的2个整数相加程序,并把结果返回到JAVA程序中。
步骤:
Step1.用记事本编写以下代码,保存为:Sum.java
代码如下:
public class Sum{ public native int add(int x,int y); //本地方法申明
static{
System.loadLibrary("add"); //当加载类时,伴随加载该库
}
public static void main(String[] args) {
System.out.println(new Sum().add(1,2));
}
}
Step2.用命令javac Sum.java编译,保证编译通过,并生成Sum.class文件。
Step3.用命令javah Sum 生成Sum.h文件。
内容如下:
/* DO NOT EDIT THIS FILE - it is machine generated */
#include /* Header for class Sum */
#ifndef _Included_Sum
#define _Included_Sum
#ifdef __cplusplus extern "C"
{
#endif /* * Class: Sum * Method: add * Signature: (II)I */
JNIEXPORT jint JNICALL Java_Sum_add (JNIEnv *, jobject, jint, jint);
#ifdef __cplusplus
}
#endif
#endif
Step4.用Microsoft Visual C++创建动态连接库,即add.dll文件。
具体方法如下:
1)、打开VC++6.0,文件->新建-> 工程 -> win32 Dynamic-Link Library .在向导中选择空工程.
2)、文件->新建-> C++ Source File,新建一文件。
该文件内容如下:
#include "stdio.h"
#include "Sum.h"
#include "jni.h"
JNIEXPORT jint JNICALL Java_Sum_add (JNIEnv *, jobject, jint x, jint y)
{
return x+y;
}
3)细心的读者可能已经注意到,上一个文件中导入了其它的头文件,像jni.h,Sum.h ,所以得先导入到VC++才能使用,否则出错。Jni.h这个文件在哪呢?其头就在JDK安装目录下include文件中,例如我本机上的路径是:C:/Program Files/Java/jdk1.6.0_12/include,把include文件下.h结尾的文件和其子目录win32下的2个.h文件全部导入到VC++库内。
Step5、 编译并生成DLL文件,把生成的DLL文件复制到与Sum.java同一目录。
Step6、用java Sum命令解释执行。