您的位置 首页 java

Java JNI 的使用

1 ,什么是JNI。

JNI是Java Native Interface的缩写,通过使用 Java 本地接口书写程序,可以确保代码在不同的平台上方便移植。

2,编写Java接口。

编写如下测试代码。通过C++编译的DLL计算两个数字相加,得到结果。

 package com.opencv.test;
public class JniTest {
    public static native int JNI_ADD(int a,int b); 
}  

先编译以上代码,在生成class的文件夹里执行命令:

【javah -class [项目所在目录] [包名.类名]】 如下:

javah -classpath E:zbxtmytestsrcmainjava com.opencv.test.JniTest

执行完后会在目录下生成一个.h文件[com_opencv_test_JniTest.h]。

4、编写DLL程序。

打开VS新建项目选择Win32项目。

确认后点击下一步应用类型选择DLL。

完成后生成如下项目文件。

复制jdk下的JNI依赖头文件文件[jni.h][jni_md.h]到vs工程目录下。

(注:jni.h在jdk的include目录下,jni_md.h在jdk的includewin32目录下)

在复制编译class生成的[com_opencv_test_JniTest.h]头文件到vs工程目录下,

在VS资源管理器里右键头文件-添加-现有项–找到复制在工程目录下的三个头文件。

添加完成后如上图所示

打开com_opencv_test_JniTest.h头文件把#include <jni.h>改成#include “jni.h”。

打开项目自动生成的源程序cpp代码[testJavaDll.cpp]引入头文件[com_opencv_test_JniTest.h]。复制[com_opencv_test_JniTest.h]头文件里的java接口生成的[Java_com_opencv_test_JniTest_JNI_1ADD]接口函数,粘贴到项目自动生成的源程序cpp代码[testJavaDll.cpp]中,并在其中修改函数如下图所示。

到这里dll已经写好,接下来点击生成–>生成解决方案,提示以下成功信息就代表dll编译成功。

可以看到dll生成的位置:

5、java调用dll进行测试。

加载DLL方式一:把DLL放在JDK的安装目录的jre/bin目录下如:[c:jdk1.8.0_202jrebin]。

加载DLL方式二:在把DLL放在项目的resources目录下,为了区分新建一个lib目录,如图所示。

在打开Project structure–libraries-点击加号–选择java把resources/lib目录添加进去,

再点击modules勾选lib。

编写以下代码验证DLL。

 package com.opencv.test;
public class JniTest {
    public static native int JNI_ADD(int a,int b);
    static{
        System.loadLibrary("testJavaDll");
        System.out.println("加载dll成功");
    }
    public static void main(String[] args) {
        int add_result=JNI_ADD(1,2);
        System.out.println("计算结果:"+add_result);
    }
}  

运行结果

文章来源:智云一二三科技

文章标题:Java JNI 的使用

文章地址:https://www.zhihuclub.com/178254.shtml

关于作者: 智云科技

热门文章

网站地图