嘿伙计我需要一些帮助。问题是更改包名后我的jni
未加载。在它工作之前很酷。我试图解决它但我无法解决。所以请帮助我。
这是错误:
应用程序中的JNI检测错误:JNI NewGlobalRef调用挂起异常' java.lang.ClassNotFoundExceptio 在致NewGlobalRef 来自java.lang.String java.lang.Runtime.nativeLoad(java.lang.String,java.lang.ClassLoader,java.lang.String)
答案 0 :(得分:2)
应用程序中的JNI检测错误:JNI NewGlobalRef调用了 调用挂起异常'java.lang.ClassNotFoundException' 来自java.lang.String的NewGlobalRef java.lang.Runtime.nativeLoad(java.lang.String,java.lang.ClassLoader, java.lang.String中)
当您调用NewGlobalRef时,您有一个挂起的异常。执行JNI代码时发生异常时,您的应用程序不会崩溃,但会创建“挂起的异常”。在执行可能引发异常的JNI工作时,您有责任检查异常。
创建挂起的异常后,只有少数几种JNI方法可以安全地调用(提到here)。
在您的情况下,您的应用程序崩溃是因为在抛出挂起的异常后调用NewGlobalRef
之前。 NewGlobalRef
不在异常后可安全调用的方法列表中。但是,您还会看到待处理异常的原因:java.lang.ClassNotFoundException
。
很有可能发生这种情况是因为你试图做类似的事情:
cls = (*env)->FindClass(env, "com/example/ndktest/SomeClass");
但随后您将SomeClass
的包名称从com.example.ndktest.SomeClass
更改为com.other.package.SomeClass
。但是,您可能也没有更改搜索课程的方式。因此您还需要将FindClass(...)
来电更新为:
cls = (*env)->FindClass(env, "com/other/package/SomeClass");
希望这有帮助