JNI: NoSuchFieldError - PullRequest
       8

JNI: NoSuchFieldError

1 голос
/ 08 декабря 2009

Вывод: javap -s SomeClass

public org.someapp.SomeClass$_data data;
  Signature: Lorg/someapp/SomeClass$_data;

Определение SomeClass в Java:

class SomeClass
{
    private class _data {
        byte[] something = new byte[1234];
    }

    public _data data;
}

Определение нативной функции в Java:

public static native int NativeFunction(SomeClass something);

Реализация Java:

SomeClass x = new SomeClass();
NativeInterface.NativeFunction(x);

Однако, когда выполняется следующий код:

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 вызывает исключение «NoSuchFieldError ;: data» при вызове GetFieldID. Я не понимаю .. Сигнатура в порядке (скопировано прямо из javap).

Обратите внимание, что получение идентификатора поля для более простой переменной, такой как unsigned short (с подписью "S"), работает просто отлично.

1 Ответ

6 голосов
/ 08 декабря 2009

У меня такое ощущение, что "Lorg/someapp/SomeClass$_data" должно быть "Lorg/someapp/SomeClass$_data;". Обратите внимание на точку с запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...