Java:JNI配置入门【极简单】

我们都知道Java是不能直接调用操作系统的硬件驱动的,而C语言是可以的。所以我们设想着通过Java调用C语言的函数来实现对硬件驱动的操作。

简单的配置如下:
下载visual studio2015。(由于VC是不支持生成64位dll文件的,所以只能用visual studio2015来生成)。

Java的配置还是比较简单的。将Java目录下H:\Program Files (x86)\Java\jdk1.8.0_92\include中的jni.h以及H:\Program Files (x86)\Java\jdk1.8.0_92\include\win32中的jawt_md.h和jni_md.h复制到Microsoft Visual Studio 14.0\VC\include目录下
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvmqgpSP-1614134130952)(https://img-blog.csdn.net/20160801213347040)]

我们打开eclipse编写以下代码:

public class MainClass {

	static {
		System.loadLibrary("JNI_HelloWorld");
	}
	
	private native void display();
	
	public static void main(String[] args) {
		new MainClass().display();
	}
}

声明了本地方法display();也就是说Java声明了该方法,C、C++语言去实现该方法。
我们用javah命令行用于生成C语言头文件。javah命令用于.class文件,也就是说我们得先编译.java文件

javac MainClass.java  // MainClass.java是我们刚编写的代码
javah MainClass       // MainClass是.class的文件名

运行完后,会生成MainClass.h文件。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D17AxFVP-1614134130955)(https://img-blog.csdn.net/20160801214011390)]

我们在visual studio新建JNI_HelloWorld工程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0uYIKh7K-1614134130958)(https://img-blog.csdn.net/20160801213639792)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7hHY2vAO-1614134130959)(https://img-blog.csdn.net/20160801213709043)]
由于visual studio生成64位dll文件是需要配置的(默认生成32位)
做如下设置:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-w0YsZGIy-1614134130960)(https://img-blog.csdn.net/20160801214228293)]
右键项目,选择属性。修改如下:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mBFWnNHg-1614134130962)(https://img-blog.csdn.net/20160801214310583)]
这样生成的dll就是64位的了。

我们点击运行项目,就会发现,在项目中会生成x64文件夹
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iMXzOlUp-1614134130963)(https://img-blog.csdn.net/20160801214433263)]
我们打开工程目录下的JNI_HelloWorld文件夹。将MainClass.h复制到该目录下。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9vnTABsq-1614134130964)(https://img-blog.csdn.net/20160801214542446)]
然后在visual studio新建cpp文件。文件名就随意取了。
编写如下代码:

#include <jni.h>
#include "MainClass.h"
#include <iostream>
using namespace std;

JNIEXPORT void JNICALL Java_MainClass_display
(JNIEnv *, jobject) {
	cout << "HelloWorld\n";
	return;
}

我们点击运行。就会生成dll文件了。该文件在x64/Debug文件夹下。
我们将该文件复制到eclipse中,再次运行代码。就会输出HelloWorld了。如果出现

Exception in thread "main" java.lang.UnsatisfiedLinkError: no JNI_HelloWorld in java.library.path

问题,可以核对一下路径。

猜你喜欢

转载自blog.csdn.net/new_Aiden/article/details/52089460