JNI
是Java Name Interface 的缩写,这个很重要,看到这个就知道这是干什么的。
用JNI主要是解决Java调用DLL库文件的问题。
具体的下面做详细说明:
首先配置java(这个就不多说了)
在来检查一下JNI是否好用 cmd——javah
好了我们开始编写简单的代码来说明这个JNI到底怎么用:
package test;
public class TestJNI {
public native void displayHelloWorld();
static {
System.loadLibrary("JNITest");
}
public static void main(String[] args) {
new TestJNI().displayHelloWorld();
}
}
以上是基本的代码,我们知道java 是运行在虚拟机上的,那么DLL是面对操作系统的,这个就麻烦了,因为在不同层,但java有一个关键字native,聪明的sun公司它是用来解决这个问题。
好了我们编译上面的文件然后在cmd中输入 javah –o 生成后的名字 –classpath 需要的jar java类名
例子:
javah -o testJNI.h test.TestJNI
文件生成了
/* DO NOT EDIT THIS FILE - it is machine generated */
#include "jni.h"
/* Header for class test_TestJNI */
#ifndef _Included_test_TestJNI
#define _Included_test_TestJNI
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: test_TestJNI
* Method: displayHelloWorld
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_test_TestJNI_displayHelloWorld
(JNIEnv *, jobject);
#ifdef __cplusplus
}
#endif
#endif
好了我们实现一下 上面的东西然后看看能不能有东西出来:
1. 创建一个C++ Class library工程
2. 最佳3个头文件jni.h,jni_md.h,test_TestJNI.h
3. 实现方法
// This is the main DLL file.
#include "stdafx.h"
#include "jni.h"
#include "test_TestJNI.h"
JNIEXPORT void JNICALL Java_test_TestJNI_displayHelloWorld
(JNIEnv *evn, jobject jobj)
{
printf("Hello World");
}
好了以上就好了
下面我们将生成的DLL放到Java工程根目录下
出项 Hello World 实现成功(Success)