Java Native Interface(JNI)是一种允许Java代码与其他编程语言编写的代码进行交互的机制。使用JNI可以创建本地类,以便在Java应用程序中调用本地代码。以下是使用JNI创建本地类的步骤:
JNI(Java Native Interface):
public class NativeClass {
// 声明本地方法
public native void nativeMethod();
static {
// 加载包含本地方法实现的动态链接库
System.loadLibrary("nativeLib");
}
public static void main(String[] args) {
NativeClass nc = new NativeClass();
nc.nativeMethod(); // 调用本地方法
}
}
使用javah
工具从Java类生成C/C++头文件:
javac NativeClass.java
javah NativeClass
这将生成一个名为NativeClass.h
的头文件。
创建一个C/C++源文件(例如NativeClass.c
),并实现头文件中声明的函数:
#include "NativeClass.h"
#include <jni.h>
#include <stdio.h>
JNIEXPORT void JNICALL Java_NativeClass_nativeMethod(JNIEnv *env, jobject obj) {
printf("Hello from native method!\n");
}
编译C/C++代码并生成动态链接库(例如,在Linux上使用gcc):
gcc -shared -fPIC -o libnativeLib.so NativeClass.c -I${JAVA_HOME}/include -I${JAVA_HOME}/include/linux
确保将生成的libnativeLib.so
放在Java的库路径中。
现在可以运行Java程序,它将调用本地方法:
java -Djava.library.path=. NativeClass
问题1:找不到本地库
java.library.path
包含了库文件的路径,或者将库文件放在系统的标准库路径中。问题2:UnsatisfiedLinkError
问题3:类型不匹配
通过以上步骤,你可以成功使用JNI创建并调用本地类。
领取专属 10元无门槛券
手把手带您无忧上云