我已经完成了一些研究,包括StackOverflow中的研究,但我仍有一些问题要处理,我需要你的帮助。
所以,我有一个Java库,它被用作第三方C ++库的包装器。这个C ++ lib是所有逻辑的所在。因此,它具有异步行为,并且需要注册回调以获得其事件的通知。我希望能够从Java注册回调,并能够通过Java获得各自事件的通知。
目前我有这样的事情:
这里的问题是当我的第三方的lib回调被触发时,我无法访问JNIEnv,也无法访问作业。
我在StackOverflow上看到过如何通过缓存JavaVM指针来访问JNIEnv指针。不过,我不知道如何访问jobject实例,以便能够调用我的CallVoidMethod:
env->CallVoidMethod(theJObjectThatIWant, methodId, ...)
我在调用C ++方法期间缓存了jobject,该方法在我的第三方库中注册了回调,但我不确定在有多个“Java包装器对象”的情况下这是否可以接受(我指的是通过JNI包装C ++功能的对象)。
你有什么建议来克服这种情况?
我希望我已经明白我的问题,如果我的研究不足以在这个论坛中找到已有的答案,我道歉:(。
非常感谢和问候。
修改: 缓存“ jobject ”似乎不起作用,因为我最终有一个“访问冲突”执行“ CallVoidMethod ”方法。
答案 0 :(得分:0)
要在本机调用结束之后缓存Java引用,需要全局引用。