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