JNI: NoSuchFieldError
Wyjście z: javap -s SomeClass
public org.someapp.SomeClass$_data data;
Signature: Lorg/someapp/SomeClass$_data;
Definicja SomeClass w Javie:
class SomeClass
{
private class _data {
byte[] something = new byte[1234];
}
public _data data;
}
Definicja natywnej funkcji w Javie:
public static native int NativeFunction(SomeClass something);
Implementacja Java:
SomeClass x = new SomeClass();
NativeInterface.NativeFunction(x);
Jednak po wykonaniu następującego kodu:
JNIEXPORT jint JNICALL Java_org_someapp_NativeInterface_NativeFunction(JNIEnv* env, jobject obj, jobject someobject) {
jclass some_class = (*env)->GetObjectClass(env, someobject);
jfieldID data = (*env)->GetFieldID(env, some_class, "data", "Lorg/someapp/SomeClass$_data");
}
Java zgłasza wyjątek „NoSuchFieldError ;: data” w wywołaniu GetFieldID. Nie rozumiem .. Podpis jest w porządku (skopiowany prosto z javap).
Zauważ, że uzyskanie identyfikatora pola dla prostszej zmiennej, takiej jak skrót unsigned short (z podpisem „S”), działa dobrze.