奇怪的是,
我的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)
答案 0 :(得分:0)
此错误实际上是由以前未在代码中取消选中的“GetMethodID”失败引起的。不得不像ViTo一样逐一地编写代码来跟踪这个问题