首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Java到第三方C++库的JNI回调系统

从Java到第三方C++库的JNI回调系统
EN

Stack Overflow用户
提问于 2012-05-17 15:11:35
回答 1查看 733关注 0票数 1

我做了一些研究,包括在StackOverflow,但我仍然有一些问题要处理,我有点需要你的帮助。

因此,我有一个Java,用作第三方C++库的包装器。这个C++库是所有逻辑的所在。因此,它具有异步行为,需要注册回调才能得到事件通知。我希望能够注册来自Java的回调,并能够在Java中得到它们各自事件的通知。

目前我有这样的事情:

  1. 注册回调(此回调在Java中注册)和调用C++“本机”方法的Java方法,该方法将在第三方库中注册回调(这是通过C++完成的);
  2. 另一个名为"fireMyEvent“的Java方法将由第三方的lib回调(来自C++)调用。

这里的问题是,当启动第三方的lib回调时,我无法访问JNIEnv,也无法访问jobject。

我在这里看到了如何通过缓存一个StackOverflow指针来访问JNIEnv指针。然而,我不确定如何访问jobject实例,以便能够调用我的CallVoidMethod:

代码语言:javascript
复制
env->CallVoidMethod(theJObjectThatIWant, methodId, ...)

我想在调用在第三方库中注册回调的C++方法时缓存jobject,但我不确定在应用程序中存在多个“C++包装对象”(我指的是通过JNI包装C++功能的对象)的情况下,这是否可以接受。

你对克服这种情况有什么建议?

我希望我已经说清楚了我的问题,如果我的研究不够好,不能在这个论坛上找到一个已经存在的答案,我很抱歉。

非常感谢和问候。

编辑:缓存"jobject“似乎不起作用,因为我的结果是执行"CallVoidMethod”方法的“访问冲突”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-05-17 16:14:52

要在本机调用结束后缓存Java引用,需要一个全局引用。

本JNI引用中的“本地和全局引用”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10638432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档