私の会社が開発したプライベートライブラリがあります。コールバック関数を設定できるようにしたので、長時間の操作が完了した後、サブスレッドでコールバックが呼び出されます。
コールバックで JVM を操作する必要があります。これは、コールバック関数のメイン コードです。
JNIEnv *pEnv = NULL;
glJniContext.pJvm->AttachCurrentThread(&pEnv, NULL);
UiInkeyMsInternal(pEnv, 10000000);
glJniContext.pJvm->DetachCurrentThread();
はAttachCurrentThreadサブ スレッドを JVM にアタッチし、UiInkeyMsInternalは Java メソッドを呼び出し、DetachCurrentThreadはサブ スレッドを JVM にデタッチし、glJniContext.pJvm次のようにネイティブ メソッド メソッドに格納されます。
JavaVM* gs_jvm;
pEnv->GetJavaVM(&gs_jvm);
glJniContext.pJvm = gs_jvm;
という行glJniContext.pJvm->DetachCurrentThread();で、プログラムがクラッシュします。しかし、線がなければそれは正常です。現象をどのように分析するか?
別の質問ですが、メソッドで JNIEnv 変数を正常に取得できますAttachCurrentThreadが、findClassメソッドが正常に実行されません。「java/lang/Thread」のように何を渡しても、0x00 が返されます。これは正常ですか、それとも無視できますか?