2012-04-23 8 views
0

私はpthreadでネイティブコードを持っていますが、Imがpthread_createを呼び出すときは、スレッド関数の引数としてJAVAコードから取得したJNIEnv *を渡しています。 JNIEnv *は有効で、使用しているすべてのコールはコールの横にあります。 (jclass)i_env-> NewGlobalRef(i_env-> FindClass( "my/package/com/Myclass")); はnullを返します。新しいスレッドからNewGlobalRefを作成する

なぜですか?

10xs、

ナホム

答えて

1

JNIEnvのスレッド固有です。 1つのスレッドから別のJNIEnvを使用することはできません。

現在のスレッドに対してJNIEnvを取得するには、JavaVMオブジェクトのAttachCurrentThreadを呼び出す必要があります。 http://developer.android.com/guide/practices/design/jni.html#JavaVM_and_JNIEnv

とのJavaVMオブジェクトの使用JNI_OnLoad関数を取得する:ここでそれを読むhttp://developer.android.com/guide/practices/design/jni.html#native_libraries

+0

私がJNI_OnLoadは、その後のJavaVM *のコピーを保存しての呼び出しをAttachCurrentThreadが、NewGlobalRefはまだ0を返します – nmnir

関連する問題