0

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

何故ですか?

10xs、ナホム

4

1 に答える 1

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

于 2012-04-23T17:28:08.243 に答える