我无法摆脱这种错误信息的JNI过时的本地引用错误访问主叫对象
JNI ERROR(APP错误):访问过时的本地参考0X ...(INDEX ...)
我试图从本地访问JNR调用者类(它是一个Java线程)的isInterrupted()
方法。线程循环完全是本地的,产生其他pthreads并保存互斥体。我需要一种主要Android活动的方式来通知线程它应该停止例如Java的interrupt()
在第一个安全时刻。
的情况是相当简单,干净,没有什么事情发生字里行间:
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()
的参数,但错误是相同的。
除了错误,我不明白为什么在这种情况下需要全局引用的原因..任何帮助表示赞赏。
很好的捕捉。现在它可以与本地引用一起工作,既可以使用非静态本地方法,也可以使用当前线程作为显式参数。谢谢。 – hanswe