私は自分のアプリケーションでC++のlibを使っています。私はjniにJavaオブジェクトを渡し、グローバル参照に保存しました。次に、私はこのJavaオブジェクトのメソッドをantiherスレッドのjniから呼び出したい(私はpthreadを使う)。FindClassとGetMethodIDはandroid jniで失敗する
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
は方法を見つけることがあります失敗します。
public class WaitingServiceReadyCallback {
public void ready(String serviceName) throws Exception { ... // some code }
}
私は次のコードを使用するJavaメソッドを呼び出します。私は
cls = env->FindClass("com/mypackage/WaitingServiceReadyCallback");
の代わりGetObjectClass
を使用する場合 、FindClass
は、このクラスを見つけることができません。
私は(ready
への呼び出し上記のように私のコードの同じ場所にgetName
への呼び出しを行った、com/java/Class
からgetName
を使用)、私は右のクラス名を持って私の__obj__
グローバル参照によってreferencdオブジェクトのクラス名を確認しようとした - com.mypackage.WaitingServiceReadyCallback
。
私はクラスが存在し、読み込まれていることを確信しています(このクラスのインスタンスがそこに作成されている前にJavaコードが実行されています)、私はそのメソッドがクラスに存在すると確信しています。
私は間違ったことを理解できません。