JNI:生成需要与Java交互的线程的本机方法
我有一个从Java进程调用的C方法:JNI:生成需要与Java交互的线程的本机方法,java,java-native-interface,jnienv,Java,Java Native Interface,Jnienv,我有一个从Java进程调用的C方法: extern "C" { JNIEXPORT jstring JNICALL Java_bla_bla_bla(JNIEnv *env, jclass java_class, jint param) { /* Spawn C threads that are going to call Java methods */ } } 问题是,我的本机方法从Java获得的只是一个JNIEnv实例。为了调用AttachCurrentT
extern "C" {
JNIEXPORT jstring JNICALL Java_bla_bla_bla(JNIEnv *env, jclass java_class, jint param) {
/* Spawn C threads that are going to call Java methods */
}
}
问题是,我的本机方法从Java获得的只是一个JNIEnv
实例。为了调用AttachCurrentThread()
,我需要一个JavaVM
对象
如何从本机方法获取
JavaVM
指针?另一种方法是缓存在JNI\u OnLoad
中接收的JavaVM*
另一种方法是调用GetJavaVM
函数,该函数是JNIEnv
的一部分:
JNIEXPORT jstring JNICALL Java_bla_bla_bla(JNIEnv *env, jclass java_class, jint param) {
JavaVM *jvm;
if (env->GetJavaVM(&jvm)) {
// Something went wrong
}
// Pass jvm to the new thread