android jni上的FindClass和GetMethodID失败 我的应用程序使用C++ LIB。我将java对象传递给jni,并将其保存到全局引用。然后,我希望从另一个线程(我使用pthread)从jni调用这个java对象的方法

android jni上的FindClass和GetMethodID失败 我的应用程序使用C++ LIB。我将java对象传递给jni,并将其保存到全局引用。然后,我希望从另一个线程(我使用pthread)从jni调用这个java对象的方法,android,java-native-interface,android-ndk,Android,Java Native Interface,Android Ndk,Java类是: public class WaitingServiceReadyCallback { public void ready(String serviceName) throws Exception { ... // some code } } 要调用java方法,我使用以下代码: jvm->AttachCurrentThread(&env, 0); cls = env->GetObjectClass(__obj__); // __obj__ is glo

Java类是:

public class WaitingServiceReadyCallback {
   public void ready(String serviceName) throws Exception { ... // some code }
}
要调用java方法,我使用以下代码:

jvm->AttachCurrentThread(&env, 0);
cls = env->GetObjectClass(__obj__); // __obj__ is global reference to object.
if (!cls)
   goto detach;
mid = env->GetMethodID(cls, "ready", "(Ljava/lang/String;)V");
那里
GetMethodID
找不到方法。 当我使用

cls = env->FindClass("com/mypackage/WaitingServiceReadyCallback");
而不是
GetObjectClass
FindClass
找不到此类

我试图检查通过我的
\uuuu obj\uuuu
全局引用引用的对象的类名(从
com/java/class
使用
getName
,在调用
ready
的代码的同一位置调用
getName
),我得到了正确的类名-
com.mypackage.waitingserviceadycallback

我确信该类存在并已加载(在创建jni之前执行的java代码和该类的实例),我确信该方法存在于该类中


所以,我不明白,我做错了什么

我遇到了这个问题。简而言之,原因是:在另一个线程中,VM没有向我们提供有关已加载类的信息。我已经解决了这个问题,方法是存储一些示例java对象的类加载器,然后使用它从其他线程手动加载所需的类