我有用於我的應用程序的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代碼以及該類的實例在那裏創建),我相信該方法存在於類中。
所以,我不明白,我做錯了什麼?