问题描述
jclass in = jniEnv->FindClass("java/lang/Integer");
jmethodID ipi = jniEnv->GetStaticMethodID(in,"parseInt","(Ljava/lang/String;)I");
jint test = jniEnv->CallStaticIntMethod(in,ipi,(jstring)jniEnv->CallStaticObjectMethod(System,getProperty,jniEnv->NewStringUTF("input")));
这是我的代码 我尝试将jstring(“ 10029909473242”)转换为jint 但是,如果我尝试打印它,则会使vm崩溃。 有更好的解决方案吗? 谢谢。
jclass JOptionPane = jniEnv->FindClass("javax/swing/JOptionPane");
jmethodID showInputDialog = jniEnv->GetStaticMethodID(JOptionPane,"showInputDialog","(Ljava/lang/Object;)Ljava/lang/String;");
jniEnv->CallStaticObjectMethod(NULL,showInputDialog,test);
解决方法
您没有显示出实际错误,但是我可以猜测一个原因:
10029909473242太大,无法放入Java int
中,因此我敢打赌Integer.parseInt
抛出了NumberFormatException
。调用任何带有未决异常的JNI方法都会使JVM崩溃。
此处的根本原因是,您应该改用Long.parseLong
,但是您还应该通过在每次ExceptionOccurred
调用之后调用ExceptionCheck
或Call*Method
来添加错误检查。然后返回JVM或调用ExceptionClear
并继续执行本机代码。
char buf1[64];
sprintf(buf1,"%d",p);
解决