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
,并且您没有检测到它返回了零,因此您没有调用任何异常处理方法,因此出现了这个“异常挂起”错误。