3 回答

TA貢獻(xiàn)2021條經(jīng)驗(yàn) 獲得超8個(gè)贊
在使用從Java到C ++的JNI進(jìn)行的同步調(diào)用中,JVM已設(shè)置了“環(huán)境”,但是從任意C ++線程的另一個(gè)方向來看,可能沒有
因此,您需要按照以下步驟
使用以下內(nèi)容掌握J(rèn)VM環(huán)境上下文 GetEnv
必要時(shí)附加上下文 AttachCurrentThread
使用正常調(diào)用該方法 CallVoidMethod
分離使用 DetachCurrentThread
完整的例子。請(qǐng)注意,我過去在博客中詳細(xì)介紹了此內(nèi)容
void callback(int val) {
JNIEnv * g_env;
// double check it's all ok
int getEnvStat = g_vm->GetEnv((void **)&g_env, JNI_VERSION_1_6);
if (getEnvStat == JNI_EDETACHED) {
std::cout << "GetEnv: not attached" << std::endl;
if (g_vm->AttachCurrentThread((void **) &g_env, NULL) != 0) {
std::cout << "Failed to attach" << std::endl;
}
} else if (getEnvStat == JNI_OK) {
//
} else if (getEnvStat == JNI_EVERSION) {
std::cout << "GetEnv: version not supported" << std::endl;
}
g_env->CallVoidMethod(g_obj, g_mid, val);
if (g_env->ExceptionCheck()) {
g_env->ExceptionDescribe();
}
g_vm->DetachCurrentThread();
}

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超3個(gè)贊
該問題中與該問題相關(guān)的唯一部分是GetEnv
,AttachCurrentThread
并且DetachCurrentThread
甚至沒有解釋。
添加回答
舉報(bào)