2017-08-22 16 views
-1

私は助けが必要です。問題はパッケージ名を変更した後にjniが読み込まれないということです。それがかなり冷静に働く前に。私はそれを解決しようとしましたが、私はできません。だから私を助けてください。パッケージ名を変更した後にjniが読み込まれない理由

これはエラーです:

JNI DETECTED ERROR IN APPLICATION: JNI NewGlobalRef called with pending exception 'java.lang.ClassNotFoundExceptio in call to NewGlobalRef from java.lang.String java.lang.Runtime.nativeLoad(java.lang.String, java.lang.ClassLoader, java.lang.String)

+0

に役立ちます**:しかし、あなたはおそらくも、あなたはまたにあなたのFindClass(...)の呼び出しを更新する必要がclass..so検索方法を変更しませんでした*、あなたのJavaコードではJNIコードではないので、 'FindClass()'から 'ClassNotFoundException'を取得し、ゼロを返したことを検出しなかったので、例外処理メソッドであるため、この '例外保留中'エラーが発生します。 – EJP

答えて

2

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.SomeClasscom.example.ndktest.SomeClassからSomeClassのパッケージ名を変更:あなたは似た何かをしようとしたので、

は、ほとんどの場合、これは起こりました。あなたは*パッケージ名を変更したため

cls = (*env)->FindClass(env, "com/other/package/SomeClass"); 

希望これは

関連する問題