У меня есть c ++ lib, используемая с моим приложением. Я передал объект java jni и сохранил его для глобальной ссылки. Затем я хочу вызвать метод этого Java-объекта из jni из другого потока (я использую pthread).
Класс 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
не может найти этот класс.
Я попытался проверить имя класса объекта referencd по моей глобальной ссылке __obj__
(использовался getName
из com/java/Class
, сделал вызов getName
в том же месте моего кода, что и выше, вызов ready
), Я получил правильное название класса - com.mypackage.WaitingServiceReadyCallback
.
Я уверен, что класс существует и загружен (код java, выполняемый до создания jni, и экземпляр этого класса там), я уверен, что метод существует в классе.
Итак, я не могу понять, что я сделал не так?