简单使用JNI

来源:互联网 发布:京东金融 人工智能 编辑:程序博客网 时间:2024/06/02 06:54

JNI: java native interface的缩写,java的本地调用,主要是为c/c++设计的。

一般的调用步骤:

1.在java类中声明native方法,javac编译该文件为class文件

2.使用javah命令生成包含native方法声明的c/c++头文件

3.vs中创建工程,添加生成的头文件和需要引用的头文件

4.根据生成的头文件写c/c++源文件,并编译成动态链接库(dll)

5.将dll文件放到项目中,在java中加载动态链接库,然后使用里面的方法


目录结构:


java代码中声明本地方法:

public class TestJni {/** * java调用c++ * @return */public native void getjni();}

使用javac命令,编译为字节码文件:


在该目录下就可以得到同名的class文件:



使用javah命令,得到头文件。文件要写绝对路径,路径要定位到包前,不要进入包(否则会报文件未找到错误):


这样就可以在项目中得到同名头文件(.h):

打开该文件你会看到,要引入jni.h文件:



创建c++工程:

新建项目,创建win32控制台程序:


点击下一步。

选择“dll”类型的空项目:


点击完成。

将需要的三个头文件复制到项目路径中。


jni.h在jdk的include目录下:

jni_md.h在jdk的include-->win32目录下:



新建空白源文件:
将头文件中声明的方法复制过来,写入具体的实现:


然后调试成功:

在debug目录下找到生成的dll文件:


工程结构:


将生成的dll文件复制到java项目中,是在根目录下,不要放到src里面:


在java中加载动态链接库,然后使用该方法:

public class TestMain {public static void main(String[] args) {System.loadLibrary("ConsoleApplication1");TestJni tjni = new TestJni();tjni.getjni();}}
运行结果:



注意:

1.javah工具,我们通过它来生产jni头文件:


2.项目中添加的头文件不仅仅是你编译生成的那个,还需要jni.h 和jni_md.h,它们存放在jdk路径下,没有的话,会报文件未找到错误。

3.“jni.h”或者"jni_md.h"报错:找不到文件或者路径。<jni.h>这样是在系统目录下找的,改为"jni.h"这样就可以在项目目录下找到了。

原创粉丝点击