Android 访问调用方对象时发生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

我无法删除此错误消息

JNI错误(应用程序错误):访问了过时的本地引用0x。。。(索引…)

我正在尝试从JNI调用方类的
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()获取当前线程。

。现在它可以使用本地引用,既可以使用非静态本机方法,也可以使用当前线程作为显式参数。谢谢,接得好。现在它可以使用本地引用,既可以使用非静态本机方法,也可以使用当前线程作为显式参数。谢谢