JNI(Java Native Interface) Java本地接口,在Java接口中用native关键字修饰,C/C++ 相当于Java接口的实现类,只不过使用C/C++来实现而不是Java的class来(implements)实现
这边博客只是简单的用C++来实现Java的(native)本地方法
环境准备:
C++/C编译环境 :MinGw
C++/C开发工具:eclipse 集成插件CDT
MinGw32位和64位:下载地址:https://download.csdn.net/download/qq_31419109/12939256
CDT:下载地址:http://www.eclipse.org/cdt/downloads.php
1. 创建一个文件夹来存放Java源码,我这里是存放在F:/java-code/JNI下的
2. 创建一个NativeDemo.java的一个源码文件,使用编辑器来编写以下代码:
public class NativeDemo {
// 代码块,每次创建对象时执行段代码
{
// 加载C++编译后生成的动态库libJNIDemo.dll,相当于引入jar包,只不过一个是Java编译后的产物,一个是C++编译的产物
System.load("F:/java-code/JNI/dll/libNativeDemo.dll");
}
// native关键字声明本方法调用本地接口
public native void sayHello();
public static void main(String[] args){
// 首先调用NativeDemo无参构造创建匿名对象,然后用这个对象调用本地方法(C++实现方法内容)
new NativeDemo().sayHello();
}
}
3. 打开命令行窗口, 进入源文件所在的目录,先把NativeDemo.java编译成字节码文件,在使用javah NativeDemo生成C++的文件头,如果你本地没有安装Java环境,请先安装Java环境
我们可以打开生成的C++头文件,大概是这样的
4. 编写C++代码实现头文件中Java_NativeDemo_sayHello(JNIEnv *, jobject)函数,我这里为了方便编译使用eclipse来编写C++的代码
5. 在eclipse中创建一个C++项目
6. 把C++需要用到的jni.h和jni_md.h引入到项目路劲中,jni.h和jni_md.h是jdk提供的头文件,文件路径分别在%JAVA_HOME%/include/和%JAVA_HOME%/include/win32/
右击项目名,选择properties
可以在这里看到我们引入的资源已经存在
7. 创建source folder编写C++程序
new file
#include "NativeDemo.h"
#include <windows.h>
#include "iostream"
JNIEXPORT void JNICALL Java_NativeDemo_sayHello(JNIEnv *, jobject){
using namespace std;
cout << "Hello___________World";
}
8. 然后把我们之前生成的NativeDemo.h复制到src文件夹下
右击项目名
9. 然后点击编译按钮,生成动态库dll
10. 把动态库复制到我们最开始创建的文件夹下的dll目录下
11. 再回到命令行窗口执行java NativeDemo
这时候C++编写的打印语句就在控制台中打印出来了
参考:https://blog.csdn.net/qq_17310933/article/details/86289613