我有一个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"
而不是来自socket的消息,但结果仍然相同。从Java代码返回的String对象始终为null。
所以我的问题是如何从上面的Java方法中获取字符串返回?
非常感谢您的时间和帮助。