本文使用java的IDEA和visual studio来详细的一步一步演示java的JNI构建过程(eclipse+vs的教程在文末)
1.打开java的IDEA,file->new,新建名为JNITIME的项目,在接下来出现的界面左侧找到名为src的文件夹图案,右击->new->package,命名为com.aijiao.test。在com.aijiao.test的文件夹图案右击->new,选择java class,命名为JNITIME。写入如下代码:
public native voidtestPrintArray(int[]a);
public static voidmain(String[] args){
inta[]={1,2,3,4,5};
intk=0;
System.loadLibrary("TestJNITIME");
JNITIME jnitime =newJNITIME();
longstartTime;
longendTime;
startTime = System.currentTimeMillis();
for(;k<500;k++){
jnitime.testPrintArray(a);
System.out.println(" ");}
endTime = System.currentTimeMillis();
System.out.print("The time use is:");
System.out.println(endTime-startTime); }
效果如下:
2.点击上边栏的Build,之后找到本java项目存储的文件夹,找到名为out的文件夹,打开,之后一直见到文件夹就打开,直到看到名为com的文件夹。
在电脑左下角的开始处搜索cmd,打开cmd.使用cd命令进入到上图显示的文件夹,输入javah -classpath . -jni com.aijiao.test.JNITIME
(java idea的版本不同可能过程略有不同,1.8.0_231版本的用上述方法即可。更高版本的可能需要让cmd进入.java文件所在的文件夹,并且最后一句命令中的javah应该替换为javac -h.查看java的版本可以在idea的左下角点击terminal打开终端,输入java -version进行查询)
3.打开visual studio,选择 文件->新建->项目,在弹出的窗口右上角搜索dll,选择动态链接库(DLL),命名为TestJNITIME(这个名字要与java代码中的 System.loadLibrary函数的参数一致)
在右侧栏找到源文件->添加->类,命名为TestJNITIME
4.在java的idea中的左下角,点击terminal,输入java -verbose,按输出的最后两行寻找,可以找到一个名字带有"jdk"字样的文件夹,在该文件夹的include文件夹中有一个名为jni.h的文件,在include文件夹里的win32文件夹里有个名为jin_md.h的文件,把这两个文件连同刚才生成的com_aijiao_test_JNITIME.h都复制到cpp项目的文件夹中的TestJNITIME文件夹中。如图所示:
在visual studio中,右侧栏的头文件上右击->添加->现有项,选择com_aijiao_test_JNITIME.h,jin_md.h,jni.h。打开com_aijiao_test_JNITIME.h,把#include <jni.h>修改为#include "jni.h"。
5.打开TestJNITIME.cpp,写入如下代码:
#include "pch.h"
#include "TestJNITIME.h"
#include "com_aijiao_test_JNITIME.h"
#include <iostream>
#include <stdio.h>
JNIEXPORT void JNICALL Java_com_aijiao_test_JNITIME_testPrintArray
(JNIEnv *env, jobject obj, jintArray a) {
jint buf[5];
jint i, sum = 0;
env->GetIntArrayRegion(a, 0, 5, buf);
for (i = 0; i < 5; i++) {
printf("%d ", buf[i]);
}
}
6.在右侧栏的解决方案上右击->属性,点击“配置管理器”,一定要在配置管理器中修改,否则无效,配置如下;
在右侧栏的项目上右击->生成,如有杀毒软件弹出,一律选择允许程序运行,输出如下:
6.在java的idea中,选择左上角的file->project sturcture->libraries,点击左上角的加号,选择java,填入路径,填到Release为止如图:
之后再选run,程序就可以愉快地跑起来啦~
(如果使用eclipse+vs可以参考这篇教程/w3cnote/jni-getting-started-tutorials.html,本文对这篇教程亦有参考,侵删)