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.other.package.SomeClass
へcom.example.ndktest.SomeClass
からSomeClass
のパッケージ名を変更:あなたは似た何かをしようとしたので、
は、ほとんどの場合、これは起こりました。あなたは*パッケージ名を変更したため
cls = (*env)->FindClass(env, "com/other/package/SomeClass");
希望これは
に役立ちます**:しかし、あなたはおそらくも、あなたはまたにあなたの
FindClass(...)
の呼び出しを更新する必要がclass..so検索方法を変更しませんでした*、あなたのJavaコードではJNIコードではないので、 'FindClass()'から 'ClassNotFoundException'を取得し、ゼロを返したことを検出しなかったので、例外処理メソッドであるため、この '例外保留中'エラーが発生します。 – EJP