Java 为什么更改包名后不加载jni
嘿,伙计们,我需要帮助。问题是更改包名后,我的Java 为什么更改包名后不加载jni,java,android,android-ndk,java-native-interface,Java,Android,Android Ndk,Java Native Interface,嘿,伙计们,我需要帮助。问题是更改包名后,我的jni没有加载。在它开始工作之前很酷。我试图解决它,但我做不到。所以请帮帮我 这就是错误: JNI在应用程序中检测到错误:调用JNI NewGlobalRef时出现挂起异常“java.lang.ClassNotFoundException” 调用NewGlobalRef 来自java.lang.String java.lang.Runtime.nativeLoad(java.lang.String、java.lang.ClassLoader、java
jni
没有加载。在它开始工作之前很酷。我试图解决它,但我做不到。所以请帮帮我
这就是错误:
JNI在应用程序中检测到错误:调用JNI NewGlobalRef时出现挂起异常“java.lang.ClassNotFoundException”
调用NewGlobalRef
来自java.lang.String java.lang.Runtime.nativeLoad(java.lang.String、java.lang.ClassLoader、java.lang.String)
JNI在应用程序中检测到错误:使用调用JNI NewGlobalRef
调用中的挂起异常“java.lang.ClassNotFoundException”
java.lang.String中的NewGlobalRef
nativeLoad(java.lang.String、java.lang.ClassLoader、,
(java.lang.String)
调用NewGlobalRef时出现了一个挂起的异常。当执行JNI代码时发生异常时,您的应用程序不会崩溃,但会创建一个“挂起的异常”。在执行可能引发异常的JNI工作时,您有责任检查异常
在创建挂起的异常之后,只有少数JNI方法可以安全地调用(如上所述)
在您的情况下,您的应用程序崩溃是因为在您调用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");
希望这对您有所帮助,因为您更改了Java代码中的包名,而不是JNI代码中的包名,所以您从FindClass()
中获得了ClassNotFoundException
,并且您没有检测到它返回了零,因此您没有调用任何异常处理方法,因此出现了这个“异常挂起”错误。