【问题标题】:JNI : Unable to find java class from native method in a callbackJNI:无法在回调中从本机方法中找到 java 类
【发布时间】:2013-07-04 07:52:23
【问题描述】:

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

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

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

由于这个回调在另一个线程中,我使用下面的代码来获取一个 JNIEnv 指针:

(jvm 是一个全局指针)

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

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

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

我该如何解决这个问题?这是否与类路径有关?

【问题讨论】:

标签: java android java-native-interface


【解决方案1】:

答案和官方解决方法可以在developer.android 找到。如果您必须超越对本机代码可能需要的所有类的预缓存全局引用,您将在此处找到一个缓存正确类加载器的成功解决方案:FindClass from any thread in Android JNI

【讨论】:

  • 我还必须缓存 jclass / jobj 和 memthodID,但它可以工作。仍然是一个丑陋的黑客。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多