我无法摆脱此错误消息
JNI 错误(应用程序错误):访问过时的本地引用 0x...(索引...)
我试图从本机访问isInterrupted()
JNI 调用程序类的方法,它是一个 Java 线程。线程循环完全是原生的,产生其他 pthread 并持有互斥锁。我需要一种主要Android活动的方法来通知线程它应该interrupt()
在第一个安全时刻由Java停止。
该场景非常简单明了,两行之间没有其他任何事情发生:
public class MyThread extends Thread {
public native static int native_world_entry();
public void run() {
native_world_entry();
}
static {
System.loadLibrary("mylib");
}
}
本机代码如下:
jint Java_..._1entry(JNIEnv* env, jobject thiz) {
//jobject jj = (*env)->NewGlobalRef(env, thiz);
jclass sclass = (*env)->FindClass(env, "java/lang/Thread");
jmethodID inted = (*env)->GetMethodID(env, sclass, "isInterrupted", "()Z");
LOGI("Checking");
jboolean status = (*env)->CallBooleanMethod(env, thiz, inted);
...
}
一切都很好,直到CallBooleanMethod()
之前的调用成功并显示“正在检查”。我尝试添加注释行并CallBooleanMethod()
相应地更改 's 参数,但错误是相同的。
除了错误之外,我不明白在这种情况下需要全局引用的原因。感谢任何帮助。