【发布时间】:2012-05-17 15:11:35
【问题描述】:
我已经完成了一些研究,包括在 StackOverflow 中,但我仍有一些问题需要处理,我需要你的帮助。
所以,我有一个 Java 库,用作 3rd 方 C++ 库的包装器。这个 C++ 库是所有逻辑所在。因此,它具有异步行为,并且需要注册回调以获取其事件的通知。我希望能够从 Java 注册回调,并能够在 Java 中获得它们各自事件的通知。
目前我有这样的事情:
- 注册回调的 Java 方法(此回调在 Java 中注册)并调用将在 3rd 方库中注册回调的 C++“本机”方法(通过 C++ 完成);
- 另一个 Java 方法,名为“fireMyEvent”,由我的第 3 方的 lib 回调调用(来自 C++)。
这里的问题是,当我的第 3 方的 lib 回调被触发时,我无法访问 JNIEnv,也无法访问 jobject。
我在 StackOverflow 上看到了如何通过缓存 JavaVM 指针来访问 JNIEnv 指针。不过,我不确定如何访问 jobject 实例,以便能够调用我的 CallVoidMethod:
env->CallVoidMethod(theJObjectThatIWant, methodId, ...)
我虽然关于在调用 C++ 方法期间缓存作业对象,该方法在我的 3rd 方库中注册回调,但我不确定这在有多个“Java 包装器对象”的情况下是否可以接受(我指的是通过 JNI 包装 C++ 功能的对象)在应用程序中。
您对克服这种情况有什么建议?
我希望我已经把我的问题说清楚了,如果我的研究不够好,无法在这个论坛中找到已经存在的答案,我深表歉意:(。
非常感谢和问候。
编辑: 缓存“jobject”似乎不起作用,因为我最终遇到“访问冲突”执行“CallVoidMethod”方法。
【问题讨论】:
标签: java callback java-native-interface