Я пытаюсь вызвать следующий метод Java (из внешнего файла JAR) из C ++
Game game = GameLoader.loadGameFromName("My game name");
Где сигнатура функции для loadGameFromName
равна
public static Game loadGameFromName(String name)
и GameLoader
- публичный финальный класс Java.Также Game
является общедоступным конечным классом.
Код, который я использовал для попытки вызвать этот метод:
jclass gameLoader = env->FindClass("player/GameLoader");
jmethodID mid = env->GetStaticMethodID(gameLoader,"loadGameFromName","(Ljava/lang/String;)Lgame/Game");
Здесь класс gameLoader
был успешно найден в первой строкеоднако метод loadGameFromName
не был найден во второй строке.
Также может иметь значение, что мне удалось успешно вызвать метод, отличный от GameLoader
, который был
String[] games = GameLoader.listGames()
со следующим кодом
jclass gameLoader = env->FindClass("player/GameLoader");
jmethodID mid = env->GetStaticMethodID(gameLoader,"listGames","()[Ljava/lang/String;");
jobjectArray stringArray = (jobjectArray) env->CallStaticObjectMethod(gameLoader,mid);
Так что код работает нормально.Таким образом, похоже, что основное отличие здесь в том, что loadGameFromName
возвращает объект Game
, а не строковый объект Java.Также может быть уместно отметить, что я могу успешно найти класс Game
с jclass game = env->FindClass("game/Game");
.
Что-то не так с тем, как я называю GetStaticMethodID
для метода loadGameFromName
?Я попытался найти примеры вызова методов Java с помощью JNI, которые возвращают произвольные объекты Java, такие как Game
, но я не смог их найти.