当前位置: 首页 > 知识库问答 >
问题:

JNI:无法在回调中从本机方法中找到java类

洪开诚
2023-03-14

我是JNI的新手,我正在努力解决这个问题。

我有一个c回调被网络库(alljoyn)调用。

在这个回调中,我需要调用Java代码。

由于此回调位于另一个线程中,因此我使用以下代码获取JNIEnv指针:

(jvm是全局指针)

JNIEnv *env = NULL;  
jvm->AttachCurrentThread(&env, NULL);

问题是,当我尝试使用此env指针调用FindClass时,结果为NULL。

如果我在主线程中执行完全相同的FindClass调用,一切都会正常工作。

我怎样才能解决这个问题?这是否与类路径有关?

共有1个答案

叶国兴
2023-03-14

答案和官方解决方法可以在developer.android.如果你必须超越预缓存本地代码可能需要的所有类的全局引用,你会找到一个成功的解决方案,在这里缓存正确的类加载器:AndroidJNI中任何线程的FindClass

 类似资料:
  • 我正在制作一个库应用程序,该应用程序使用谷歌断路器检测android中的本机崩溃。每当我的主端发生本机崩溃时,断路器都会调用以下回调。从这个回调中,我需要使用JNI在java类中调用一个静态val方法。 这是我的java方法: 在Android5.0之前,这一功能一直运行良好。但在Lollipop中,我无法调用我的java方法,因为我无法在Logcat控制台上看到“内部句柄异常”日志。 以下是我在

  • 问题内容: 因此,我正在编写一个使用大型c 库的Android应用。我可以正常工作,以便Java应用程序可以调用c 委托方法,但是我发现自己希望自己可以将来自c 的消息记录到Android日志中。从Java上这很容易,但是我不知道如何从c 调用Java方法。我的搜索找到了从c 打开jvm的方法,这根本不是我想要做的。理想情况下,我想将日志方法指针传递给c ,然后可以在需要时使用它。当然,Java不

  • JNI参考文献中说 “本地引用在本机方法调用期间有效。它们在本机方法返回后自动释放。 资料来源:http://docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#global_local 我有点迷路了。根据上述内容,我必须显式调用NewGlobalRef并传递从调用NewObject返回的对象。我试过这个,似

  • 我已经翻阅了这里所有关于这个主题的其他帖子,但没有一个对我有帮助。 我使用的是一个第三方SDK(oovoo),它包含一个.jar文件和.so文件(armeabi-v7a) null 谢谢! android studio版本0.8.6 gradle版本1.12 Ooovoo版本1.2.4

  • TL;博士我在通过线程将FFMPEG原始数据从C代码传递到JAVA代码(用于显示)时遇到问题。 有一个服务器可以向其客户端发送编码帧。这些编码的帧是用一些FFMPEG魔法编码的。在客户端接收时,前面提到的帧被解码为原始RGB数据(作为无符号字符*)。现在的问题是,帧在某种“侦听器”中被接收。只要一个线程在后台运行,轮询服务器,并在新帧可用时运行特定的功能。 当前以视频格式显示帧的解决方案是将每个帧

  • 问题内容: JNI参考资料指出 “本地引用在本地方法调用期间有效。本地方法返回后,它们会自动释放。 来源:http : //docs.oracle.com/javase/7/docs/technotes/guides/jni/spec/functions.html#global_local 我有点迷路了。根据上述内容,我必须显式调用 NewGlobalRef 并将从调用返回的对象传递给 NewOb