一.简介
JNI是Java Native Interface的缩写
二.通过实例介绍 JNI的书写步骤(本实例实现java传入两个整型参数给c,c返回相加结果给java)
1 编写带有native声明的方法的java类
2 使用javac命令编译所编写的java类
package com.liurunfeng.helloworld.jni;
public class HelloWorldJNI
{
public native int sum(int a , int b);
public static void main(String[] args)
{
System.loadLibrary("testjni");
HelloWorldJNI hj = new HelloWorldJNI();
System.out.println(hj.sum(4, 2));
}
}
注意我们的sum()方法的声明,它有一个关键字native,表明这个方法使用java以外的语言实现。方法不 包括实现,因为我们要用c/c++语言实现它。注意System.loadLibrary("testjni")这句代码,它是在静态初始化块中定义的,系统用来装载testjni共享库,这就是我们在后面生成的testjni.dll(如果在其他的操作系统可能是其他的形式,比如testjni.so)
3 使用javah ?jni java类名生成扩展名为h的头文件
dos下 javah com.liurunfeng.helloworld.jni.HelloWorldJNI (注意路径,要在com的当前目录下)
生成 com_liurunfeng_helloworld_jni_HelloWorldJNI.h (C/C++需要的头文件)
4 创建c动态链接文件,用visual c++ 创建 win32 动态链接库工程 创建空工程 将 com_liurunfeng_helloworld_jni_HelloWorldJNI.h加入工程 并将 jdk1.6.0_10\include\jni.h 和jdk1.6.0_10\include\win32\jni_md.h 两个头文件 拷贝到 c++工程 并修改 com_liurunfeng_helloworld_jni_HelloWorldJN I.h 将 #include<jni.h> 改成 #include "jni.h"
5 创建c++ 源文件 实现java 调用函数 (c++ 代码)
#include "com_liurunfeng_helloworld_jni_HelloWorldJNI.h"
#include <iostream>
using namespace std;
JNIEXPORT jint JNICALL Java_com_liurunfeng_helloworld_jni_HelloWorldJNI_sum(JNIEnv * evn, jobject jj, jint a, jint b)
{
return a + b;
}
6 编译后 将在工程Debug目录下 生成testjni.dll。将此文件 加入到path里 让java应用找到.重启之前打开的eclipse
运行java代码。