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

Int*_*idd 5 java java-native-interface android

我对 JNI 还很陌生,并且正在努力解决这个问题。

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

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

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

(jvm是全局指针)

JNIEnv *env = NULL;  
jvm->AttachCurrentThread(&env, NULL);
Run Code Online (Sandbox Code Playgroud)

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

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

我怎样才能解决这个问题 ?这与类路径有某种关系吗?

Ale*_*ohn 4

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