根据
GetStringUTFChars,最后一个参数是的指针
jboolean。
更改
return env->GetStringUTFChars(returnString, JNI_FALSE);
至
return env->GetStringUTFChars(returnString, NULL);
或者更好的是,返回一个
std::string
std::string DiagLayerContainer_getDESC(...) { ... const char *js = env->GetStringUTFChars(returnString, NULL); std::string cs(js); env->ReleaseStringUTFChars(returnString, js); return cs;}我建立了一个类似的简单示例,到目前为止,代码看起来还不错。
虽然,有两个可能的错误源。
第一个是方法签名。尝试
"()Ljava/lang/String;"代替
"(Ljava/lang/Object;)Ljava/lang/String;"。
第二个是在Java源代码本身中。如果java方法返回空字符串,
CallObjectMethod()将返回NULL
jstring并
GetStringUTFChars()失败。
添加一个
if (returnString == NULL) return NULL;
之后
CallObjectMethod()。
因此,请查看java源代码,看看该方法是否
getDESCDiagLayer()可能返回空字符串。



