我有用于我的应用程序的C++ lib。我将java对象传递给jni并将其保存到全局引用。然后,我想从antoher线程(我使用pthread)从jni调用此java对象的方法。Android上的FindClass和GetMethodID失败jni
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无法找到这个类。
我试图用我的__obj__全局引用检查对象referencd的类名(从com/java/Class使用getName,在同一个地方我的代码如上调用ready作出呼吁getName),我得到了正确的类名 - com.mypackage.WaitingServiceReadyCallback 。
我确定该类存在并加载(在jni之前执行的java代码以及该类的实例在那里创建),我相信该方法存在于类中。
所以,我不明白,我做错了什么?
2011-12-05
pashkoff