我做了一些研究,包括在StackOverflow,但我仍然有一些问题要处理,我有点需要你的帮助。
因此,我有一个Java,用作第三方C++库的包装器。这个C++库是所有逻辑的所在。因此,它具有异步行为,需要注册回调才能得到事件通知。我希望能够注册来自Java的回调,并能够在Java中得到它们各自事件的通知。
目前我有这样的事情:
这里的问题是,当启动第三方的lib回调时,我无法访问JNIEnv,也无法访问jobject。
我在这里看到了如何通过缓存一个StackOverflow指针来访问JNIEnv指针。然而,我不确定如何访问jobject实例,以便能够调用我的CallVoidMethod:
env->CallVoidMethod(theJObjectThatIWant, methodId, ...)我想在调用在第三方库中注册回调的C++方法时缓存jobject,但我不确定在应用程序中存在多个“C++包装对象”(我指的是通过JNI包装C++功能的对象)的情况下,这是否可以接受。
你对克服这种情况有什么建议?
我希望我已经说清楚了我的问题,如果我的研究不够好,不能在这个论坛上找到一个已经存在的答案,我很抱歉。
非常感谢和问候。
编辑:缓存"jobject“似乎不起作用,因为我的结果是执行"CallVoidMethod”方法的“访问冲突”。
发布于 2012-05-17 16:14:52
要在本机调用结束后缓存Java引用,需要一个全局引用。
见本JNI引用中的“本地和全局引用”。
https://stackoverflow.com/questions/10638432
复制相似问题