错误原因
通过JNIEnv创建的jobject,大多是局部变量,出了函数作用域后,就不能再被使用了
所以一定要将这些变量转为全局变量,再传给外部指针或引用,并且用完要释放
正确代码
//char数组转jstring
void toString(const char *charArray, jstring &string) {
JNIEnv *env = nullptr;
bool detached = JNI::jvm->GetEnv((void **) &env, JNI_VERSION_1_6) == JNI_EDETACHED;
if (detached) JNI::jvm->AttachCurrentThread(&env, nullptr);
jstring localString = env->NewStringUTF(charArray);
string = (jstring) env->NewGlobalRef(localString);
if (detached) JNI::jvm->DetachCurrentThread();
}
//调用方法
jstring string = nullptr;
toString(charArray, string);
//使用
env->CallVoidMethod(interface, onErrorMethod, code, string);
//释放
env->DeleteGlobalRef(string);
string = nullptr;