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しか取得しません