Я пытаюсь вызвать следующий метод Java из C ++
public Moves moves(final Context context)
, который находится в открытом финальном классе с именем Game
.Я использовал следующий код JNI из C ++, чтобы найти метод
jclass gameClass = env->FindClass("game/Game");
jmethodID moves_id = env->GetMethodID(gameClass,"moves","(Lutil/Context;)Lgame/rules/play/moves/Moves;");
, и проверил, что он может успешно найти идентификатор метода.Проблема заключается в том, что когда я вызываю метод, в следующем коде возвращается значение NULL (которое, как я предполагаю, указывает на ошибку).
jobject moves_obj = env->CallObjectMethod(game_object,moves_id, context_object);
, где game_object
- это объект задания, представляющий объект Game
иcontext_object
- это объект задания, представляющий объект Context
.Я новичок в JNI, и я еще не сталкивался с ситуацией, когда метод был найден, но была ошибка, связанная с вызовом этого метода.Есть ли хороший способ отладки этого?
EDIT:
Похоже, добавление
if(env->ExceptionCheck()){
env->ExceptionDescribe();
}
может показать любые исключения, которые произошли в вызываемом коде Javaи в моем случае было исключение.Так что с кодом JNI проблем не было.