JNI DETECTED ERROR IN APPLICATION: JNI NewGlobalRef called with pending exception 'java.lang.ClassNotFoundException' in call to NewGlobalRef from java.lang.String 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");
但你从com.example.ndktest.SomeClass
改变SomeClass
包的名字com.other.package.SomeClass
。不过,你可能也没改变你的搜索,你还需要更新您的FindClass(...)
调用class..so:
cls = (*env)->FindClass(env, "com/other/package/SomeClass");
希望这有助于
**因为你改变了包名* *,在你的Java代码中,而不是在你的JNI代码中,所以你从FindClass()中得到了一个'ClassNotFoundException',并且你没有检测到它返回了零,所以你没有调用其中一个异常处理方法,所以你有这个'异常待处理'错误。 – EJP