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