У меня есть библиотека JAR, которая содержит метод, который я хотел бы использовать для моего проекта C ++. Я использую JNI для вызова метода. Мне удалось вызвать статический метод и передать ему аргументы без проблем. Однако, когда я попытался сделать то же самое с методом, который возвращает строку из Java, я не смог получить возвращаемую строку вообще.
Метод Java:
public static String receiveAckMessage() {
try {
in.read(buffer);
} catch (IOException e) {
e.printStackTrace();
}
receivedMessage = new String(buffer);
return receivedMessage;
}
И в проекте C ++ я вызвал метод Java с помощью:
JNI_CreateJavaVM(&jvm, (void**)&env, &vm_args);
jclass cls = env->FindClass("SendMessage");
if (cls == nullptr) {
printf("ERROR: class not found!\n");
}
else {
jmethodID meth = env->GetStaticMethodID(cls, "receiveAckMessage", "()Ljava/lang/String;");
if (meth != nullptr) {
jstring strs = (jstring)env->CallStaticObjectMethod(cls, meth);
if (strs != NULL) {
const char *strReturn = env->GetStringUTFChars(strs, JNI_FALSE);
printf("String: %s\n", strReturn);
}
else printf("Cannot get return value.\n");
}
else {
printf("Method not found!\n");
}
}
CallStaticObjectMethod
всегда возвращает NULL в этот момент, и я не мог пройти мимо. И я также попытался return "Hello World"
вместо сообщения из сокета, но результат все тот же. Объект String, возвращаемый из кода Java, всегда равен нулю.
Итак, мой вопрос: как я могу получить возвращаемую строку из метода Java выше?
Большое спасибо за ваше время и помощь.