Android 访问调用方对象时发生JNI陈旧本地引用错误
我无法删除此错误消息 JNI错误(应用程序错误):访问了过时的本地引用0x。。。(索引…) 我正在尝试从JNI调用方类的Android 访问调用方对象时发生JNI陈旧本地引用错误,android,android-ndk,java-native-interface,Android,Android Ndk,Java Native Interface,我无法删除此错误消息 JNI错误(应用程序错误):访问了过时的本地引用0x。。。(索引…) 我正在尝试从JNI调用方类的isInterrupted()方法的本机访问,它是一个Java线程。线程循环完全是本机的,生成其他pthread并保存互斥锁。我需要一种方法让主Android活动通知线程它应该在第一个安全时刻停止,例如通过Java的interrupt() 场景非常简单明了,两行之间没有其他事情发生: public class MyThread extends Thread { public
isInterrupted()
方法的本机访问,它是一个Java线程。线程循环完全是本机的,生成其他pthread并保存互斥锁。我需要一种方法让主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);
...
}
一切正常,直到调用BooleanMethod()之前的调用成功并显示“Checking”(检查)。
我试图添加注释行并相应地更改CallBooleanMethod()
的参数,但错误相同
除了错误之外,我还不明白为什么在这种情况下需要全局引用。。非常感谢您的帮助。我想这是因为本地世界的输入是静态的。所以这不是神话。它是MyThread类实例。 向native_world_entry方法添加额外参数以显式传递线程处理程序,例如native_world_entry(this)
另外,您还可以使用Thread.currentThread()来获取当前线程。我认为这是因为原生世界项目是静态的。所以这不是神话。它是MyThread类实例。 向native_world_entry方法添加额外参数以显式传递线程处理程序,例如native_world_entry(this)
另外,您还可以使用Thread.currentThread()获取当前线程。。现在它可以使用本地引用,既可以使用非静态本机方法,也可以使用当前线程作为显式参数。谢谢,接得好。现在它可以使用本地引用,既可以使用非静态本机方法,也可以使用当前线程作为显式参数。谢谢