内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用
在将我的手机升级到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调用的范围。