这是我第一次使用 JNI。
我使用 native 关键字声明方法,然后根据需要成功使用它们。
但我无法加载具有自定义返回类型的方法。
喜欢 :
public native Feature[] getFeatures();
我添加了一个名为 feature 的类,但它表明无法加载此方法。它给了我一个例外。当我调试它时。在 ClassLoader 类方法中
static long findNative(ClassLoader loader, String name) {
Vector libs =
loader != null ? loader.nativeLibraries : systemNativeLibraries;
synchronized (libs) {
int size = libs.size();
for (int i = 0; i < size; i++) {
NativeLibrary lib = (NativeLibrary)libs.elementAt(i);
long entry = lib.find(name);
if (entry != 0)
return entry;
}
}
return 0;
}
它找不到我声明的函数。并触发 NoSuchMethodError。
是因为返回类型吗?因为当我声明返回 int 或 boolean 的方法时,它工作正常。
这就是我所拥有的。
C 标头包含:
/*
* Class: com_trial_JHeap
* Method: getFeatures
* Signature: ()[Lcom/trial/JHeap/Feature;
*/
JNIEXPORT jobjectArray JNICALL Java_com_trial_JHeap_getFeatures
(JNIEnv *, jobject);
/*
* Class: com_trial_JHeap
* Method: setMZException
* Signature: (II)Z
*/
JNIEXPORT jboolean JNICALL Java_com_trial_JHeap_setMZException
(JNIEnv *, jobject, jint, jint);
和我的java类:
public class JHeap {
static {
System.loadLibrary("JHeap");
}
public class Feature {
public Feature() {
}
}
public JHeap() {
}
public native boolean setMZException(int check_interval,int retry_interval);
/**
*
* @return
*/
public native JHeap.Feature[] getFeatures();
}
}
我没有 c 文件。我只得到so lib