Java 输入 null 时出现 NumberFormatException 错误

Java NumberFormatException error for input null

当我 运行 我的代码如下:

import javax.swing.JOptionPane;

public class HelloWorld{
    public static void main(String[] args){

        String dataStr=JOptionPane.showInputDialog("enter");

        if (dataStr!= null){
            int data=Integer.parseInt(dataStr);
            JOptionPane.showMessageDialog(null,"Ok"+data);
        }
    }
}

当我输入null时,终端显示如下错误:

Exception in thread "main" java.lang.NumberFormatException: For input string: ""
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
    at java.lang.Integer.parseInt(Integer.java:592)
    at java.lang.Integer.parseInt(Integer.java:615)
    at HelloWorld.main(HelloWorld.java:9)

我觉得加上条件后dataStr!=null应该不会出现这样的错误。 我的代码有什么问题吗?

更改条件

if (dataStr!= null){

if (dataStr!= null && (!dataStr.trim().isEmpty())){

您的问题是从以下位置返回的字符串:JOptionPane.showInputDialog("enter");

可以是以下三种情况之一:

  • null(如果对话框被取消)
  • 一个有效的 int 数字字符串 -- 那么你的 Integer.parseInt 就可以工作了
  • 或任何其他非数字字符串。

不输入字符串直接按回车,返回值为空字符串,"",属于第三类。解决问题的最佳方法是 1) 在 try/catch 块中解析字符串,从而捕获所有无效输入,或者 2) 强制用户仅输入数字数据,例如使用 JSlider 或 JSpinner。

例如:

if (dataStr != null){

    try {
        int data=Integer.parseInt(dataStr);
        JOptionPane.showMessageDialog(null,"Ok"+data);
    } catch (NumberFormatException nfe) {
        // notify user that input was invalid
    }

}