私の会社が開発したプライベートライブラリがあります。コールバック関数を設定できるようにしたので、長時間の操作が完了した後、サブスレッドでコールバックが呼び出されます。
コールバックで 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 が返されます。これは正常ですか、それとも無視できますか?