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