JNI |Исключение при возврате из нативного кода |IncompatibleClassChangeError: вызов метода из интерфейса, не реализованного классом - PullRequest
1 голос
/ 13 июня 2011

Странно это,

Кажется, что мой код на Java и C работает нормально. Однако, когда все сделано в коде C, и программа продолжит выполнение остальной части реализации Java, выдается следующее исключение.

Если меня заставят, я просто переверну вызов нативного кода в try / catch, но меня беспокоит, что выдается исключение по неизвестной мне причине? Кто-нибудь видел это раньше?

JavaCInterface.java (Extends Thread)

static {
    Log.v(JavaCInterface.class.toString(), "Loading native libraries");
    System.loadLibrary("JavaCInterface");
}

public native void cFunction(); 

@Override
public void run() {
    super.run();
    cFunction(); // Exception thrown when control is returned here
    return;
}   

JavaCInterface.cpp:

JNIEXPORT void JNICALL Java_com_test_jni_JavaCInterface_cFunction(JNIEnv * env, jobject thiz)
{
    ... // Stuff happens here
    logVerbose("Leaving Native Code"); // This gets logged fine and is the last line of the native method

}

Странно нет? Есть мысли?

ERROR/AndroidRuntime(2379): java.lang.IncompatibleClassChangeError: invoking method from interface not implemented by class
ERROR/AndroidRuntime(2379):     at com.test.jni.JavaCInterface.cFunction(Native Method)

1 Ответ

0 голосов
/ 20 июня 2011

Эта ошибка на самом деле была вызвана ошибкой «GetMethodID», которая ранее не проверялась в коде. Пришлось отследить это, как сказал ViTo, обрезая код по кусочкам

...