JNI |从本机代码返回时的异常| IncompatibleClassChangeError:从类未实现的接口调用方法

时间:2011-06-13 10:41:24

标签: java-native-interface android-ndk

奇怪的是,

我的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 :(得分:0)

此错误实际上是由以前未在代码中取消选中的“GetMethodID”失败引起的。不得不像ViTo一样逐一地编写代码来跟踪这个问题