java - JNI:产生需要与 Java 交互的线程的本地方法
问题描述
我有一个从 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
实例。为了打电话AttachCurrentThread()
,我需要一个JavaVM
对象。
如何JavaVM
从本机方法中获取指针?
解决方案
一种替代方法是缓存JavaVM*
您收到的JNI_OnLoad
.
另一种选择是调用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
推荐阅读
- node.js - ReferenceError:nodejs中未定义窗口
- javascript - Object.create() 方法是执行浅拷贝吗?
- python - 附加到字典
- angular - Updating data without passing id param in URL
- python - Python输出方法
- c++ - DirectShow:为 YV12 渲染
- python - 将字符串转换为 Dict / JSON
- css - 根据智能手机屏幕大小调整字体大小 React native
- botframework - Microsoft Bot Framework:确定用户的 Web 聊天会话可用性
- python - 从一个列表中找到一个元素并将其与另一个列表中的元素进行比较