当我运行此代码时:
package jni_2;
public class Min2 {
static {
System.loadLibrary("kernel32");
}
public native long FlushProcessWriteBuffers();
public static void main(String[] args) {
Min2 c = new Min2();
c.FlushProcessWriteBuffers();
}
}
我得到了这个例外:
Exception in thread "main" java.lang.UnsatisfiedLinkError: jni_2.Min2.FlushProcessWriteBuffers()J
at jni_2.Min2.FlushProcessWriteBuffers(Native Method)
at jni_2.Min2.main(Min2.java:14)
Java Result: 1
答案 0 :(得分:1)
JNI不会那样工作。
您似乎正在尝试加载Windows运行时库(kernel32
)并调用其FlushProcessWriteBuffers
函数。你无法用JNI做到这一点。使用JNI,您只能调用根据the JNI specification编码和链接的特殊编写的本机函数。
为了通过JNI调用FlushProcessWriteBuffers
,您需要在C(或其他)中编写兼容JNI的包装函数,编译它以生成库,加载该库,然后进行本机调用。然后包装函数可以调用FlushProcessWriteBuffers
。
您还可以考虑使用JNA,它有点像通用的包装函数,允许您调用任何本机函数,而无需编写自己的包装器。
答案 1 :(得分:-1)
看起来您正在尝试使用JNI来调用Windows系统函数。
为了实现这一点,您需要编写自己的C包装器,该包装器符合JNI命名约定,并在内部调用FlushProcessWriteBuffers()
。
或者,请查看JNA。