这是我第一次使用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文件。我只得到了这样的lib