我正在尝试为
编写本机函数protected static native boolean _connect(String user, String password,
String machine) throws Exception;
实施如下:
JNIEXPORT jboolean JNICALL Java_jniprint__1connect
(JNIEnv *env, jclass clazz, jstring _machine, jstring _user, jstring _pass)
{
cout << "Connecting !!!!!!!!" << endl;
const jchar *machine = env->GetStringChars(_machine, JNI_FALSE);
cout << "after machine!!!!!!!!" << endl;
return JNI_FALSE;
}
当_machine参数不为null时,它是完美的,当它为null时 - jvm剧烈崩溃
A fatal error has been detected by the Java Runtime Environment:
EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x6d96019f, pid=16444, tid=10744
JRE version: 6.0_30-b12
Java VM: Java HotSpot(TM) Client VM (20.5-b03 mixed mode, sharing windows-x86 )
Problematic frame:
V [jvm.dll+0xa019f]
...
怎么回事?
答案 0 :(得分:2)
你确定你没有把它传递给null吗? 编辑:很抱歉阅读马虎,你传递的是null。在那种情况下,它应该崩溃。
此外,您应该调用ReleaseStringchars(),否则将来的调用可能会崩溃(或者给您带来其他问题)。
编辑:使用-Xcheck运行jvm:jni在使用JNI进行开发时通常很有用。不确定它会对你有所帮助,但我认为无论如何我都应该抛弃它。
答案 1 :(得分:0)
将java端的字符串设置为null。你必须将该字符串设置为“”。