Jni 报错 “JNI WARNING: threadid=1 using JNI after critical get ...”的解决方法 近日遇到这样的问题,在测试android程序时发现,在各种手机上都没有问题,唯独在使用某一品牌的平板电脑时就报如下错误 signal 11 (SIGSEGV), fault addr deadd00d 查看log发现,Jni报了一个WARNING JNI WARNING: threadid=1 using JNI after critical get ... 这个错误为Jni使用错误 比如这样是不允许的 float * pSrc = (float *)env->GetPrimitiveArrayCritical(src, 0); float * pDst = (float*)env->GetDirectBufferAddress( dst ); env->ReleasePrimitiveArrayCritical(src, pSrc, 0 必须要改成这样 float* pDst = (float*)env->GetDirectBufferAddress( dst ); float* pSrc = (float*)env->GetPrimitiveArrayCritical(src, 0); env->ReleasePrimitiveArrayCritical(src, pSrc, 0); 也就是说,在GetPrimitiveArrayCritical和ReleasePrimitiveArrayCritical之间不能再调用其他Jni的函数 而且这种情况只会在特定的设备或者模拟器里才会出现,情况比较特殊,需要注意。