我已经阅读了一些关于 JNI 中本地和全局引用的参考资料。但是我找不到明确的答案,作为参数传递给 JNI 函数的 Java 对象是本地引用还是全局引用。我认为它应该是全球性的,但是有一个问题:
首先,我得到 Java 对象指针并保存它。然后本机回调函数调用该对象的方法。回调函数是从一个单独的线程调用的。该线程是使用 AttachCurrentThread() 创建的,因此 JVM 知道它。JNIEnv* 变量也是有效的,并且该对象没有被垃圾调用,但是我收到警告然后崩溃。
JNI 警告:0x4108edb8 不是 Lcom/my/company/MyClass;.load:(Ljava/lang/String;)V (GetObjectClass) 中的有效 JNI 引用