1

这是我第一次使用 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

4

0 回答 0