1、简述:
java通过JNI调用C语言方法打印一句话。
2、步骤:
(1)编写java代码
public class HelloWorld {
//此处是本地方法
private native void print();
//main方法调用,打印输出
public static void main(String args[]) {
new HelloWorld().print();
}
//加载C语言编译生成的动态dll库
static {
System.load("E:\\Idea_Project\\raphael_learning\\JNI\\src\\main\\
resources\\HelloWorld.dll");
}
}
(2)编译java代码,使用javah命令生成头文件
执行命令目录:包名的上一级目录,例:src/java/main下
命令:javah 全限定类名
注意:生成的头文件和类在同一层目录下,如要指定生成的目录,可添加如下命令:
命令:javah -d 输出目录 全限定类名
注意:如果有多文件生成,命令如下:
命令:javah -d 输出目录 全限定类名 全限定类名
(3)编写C语言代码(本例使用的是vs2015)
#include"jni.h"
#include "jni_md.h"
#include <stdio.h>
#include "com_raphael_jni_HelloWorld.h"
JNIEXPORT void JNICALL Java_com_raphael_jni_HelloWorld_print(JNIEnv *env, jobject obj) {
printf("Hello World!\n");
return;
}
(4)头文件异常处理
-
将jdk安装目录下的jni.h与jni_md.h,java代码生成的头文件复制放入C语言项目根目录。
%JAVA_HOME%\include\jni.h
%JAVA_HOME%\include\win32\jni_md.h
-
在vs2015中的C语言项目添加3个头文件
-
将java代码生成的头文件中的#include <jni.h> 改为 #include "jni.h"
注意:项目的根目录是里面一个文件夹,即最外层为解决方案,内层的文件夹为项目目录
(5)编译生成dll文件
vs项目配置为Release x64
生成==》生成解决方案即可
(6)运行java代码
将dll文件拷贝到java代码中指定的目录下
运行java代码,控制台打印结果:
Hello World!
完结!