如何正确退出线程 "main" java.lang.NumberFormatException 中的 JOptionPanel 异常:null

How to properly exit out of JOptionPanel Exception in thread "main" java.lang.NumberFormatException: null

我正在尝试创建一个 GUI,用户必须在其中输入一个整数。如果用户输入非整数,它会提示 GUI。我也想让它退出。当我让它退出时,我得到这个错误:

Exception in thread "main" java.lang.NumberFormatException: null.

我有点菜鸟,需要一些指导:)

public class Generator

{


    public static void main (String[] args)
    { String input = JOptionPane.showInputDialog("Enter Desired Analysis level");
        int analysisLevel = Integer.parseInt(input);
        try
        {
            if (analysisLevel >= 0)
            {
                System.out.println(analysisLevel);

            }


            else
            {

                input = JOptionPane.showInputDialog("Enter Desired Analysis level");

            }
        }
        catch (Exception e)
        {
            System.out.println("Input was no number" + e);
            System.exit(0);

        }
        System.exit(0);
}
}

问题是您在 try/catch 块中留下了可能导致异常 (int analysisLevel = Integer.parseInt(input);) 的一行。你需要把它移到里面:

String input = JOptionPane.showInputDialog("Enter Desired Analysis level");
try
{
    int analysisLevel = Integer.parseInt(input);
    if (analysisLevel >= 0) {
        System.out.println(analysisLevel);
    } else {
        input = JOptionPane.showInputDialog("Enter Desired Analysis level");
    }
}
catch (Exception e)
{
    System.out.println("Input was no number. " + e);  
}

此外,您不需要 System.exit(0);,因为程序无论如何都会退出,使用 System.exit(0); 通常不是好的做法。

您正在打印 catch 块中的错误 -- NumberFormatException 是您尝试将非整数解析为整数时抛出的异常。唯一的问题是抛出错误的行不在 try 块中。

试试这个。这利用了例外:

public static void main(String[] args) {
    String input = JOptionPane.showInputDialog("Enter Desired Analysis level");
    try {
        int analysisLevel = Integer.parseInt(input);
        //Code you want to run when analysisLevel is a number
        if (analysisLevel >= 0) {
            System.out.println(analysisLevel);
        }
    } catch (NumberFormatException nfe) {
        //Code you want to run when analysisLevel isn't a number
        input = JOptionPane.showInputDialog("Enter Desired Analysis level");
    }
    System.exit(0);
}