Android ICS:JNI错误尝试使用陈旧的本地引用0x1吗?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (49)

在将我的手机升级到Android 4.03 ics后,我的游戏剂量再次打开,它只是关闭,没有任何错误信息:

04-02 16:55:27.672: E/dalvikvm(26884): JNI ERROR (app bug): attempt to use stale local reference 0x1
04-02 16:55:27.672: E/dalvikvm(26884): VM aborting

我没有在android 2.3上的这个问题 ,我不知道它是否有帮助,但有时我也会得到这个错误:

04-02 16:55:26.061: E/Adreno200-ES11(26884): <qglDrvAPI_glTexImage2D:1913>: GL_STACK_UNDERFLOW
提问于
用户回答回答于

对于像0x1之类的陈旧本地引用应该提示您,Java VM正尝试使用不是Java对象的东西作为Java对象。

例如,我们假设你的JNI函数是:

JNI_EXPORT jboolean foobar(JNIEnv *env, jobject self) {
  ...
  return JNI_TRUE;
}

但是你错误地声明了Java的对应public native Boolean foobar()而不是public native boolean foobar()

这是一个容易犯的错误,因为之间的唯一区别boolean,并Boolean为资本。

  • boolean,一个原始类型,用JNI表示 boolean
  • java.lang.Boolean,也被称为Boolean,是以JNI表示的类类型jobject
用户回答回答于

“stale local reference”错误意味着你要在JNI调用之间保存对某个Java对象的本地引用; NewGlobalRef在做任何事情之前,你需要使用该方法将该引用转换为全局引用,这会导致引用持续超出一个JNI调用的范围。

扫码关注云+社区