线程“AWT-EventQueue-0”java.lang.NumberFormatException中的异常:用于输入字符串:“”

线程“AWT-EventQueue-0”java.lang.NumberFormatException中的异常:用于输入字符串:“”,java,Java,我已经做了一个程序来计算正方形、圆形和矩形的面积 //从用户处获取输入 String A=TF1.getText(); String B=TF2.getText(); String C=TF3.getText(); String D=TF4.getText(); //将其转换为整数 W=Integer.parseInt(A); X=Integer.parseInt(B); Y=Integer.parseInt(C); Z=Integer.parseInt(D); //使用这些值计算面积

我已经做了一个程序来计算正方形、圆形和矩形的面积

//从用户处获取输入

String A=TF1.getText();
String B=TF2.getText();
String C=TF3.getText();
String D=TF4.getText();
//将其转换为整数

W=Integer.parseInt(A);
X=Integer.parseInt(B);
Y=Integer.parseInt(C);
Z=Integer.parseInt(D);
//使用这些值计算面积

  A1=W*W;
  A2=X*Y;
  A3=(3*Z*Z);
//并根据所选选项显示

if (RB1.isSelected())
TF5.setText(" "+A1);
else if(RB3.isSelected())
TF5.setText(" "+A2);
else
TF5.setText(" "+A3);

//此外,根据用户选择的选项,我还使一些文本字段不可见。您正在尝试将空字符串转换为数字。如果用户没有在textfield中输入任何内容,代码将从textfield中检索空字符串,然后尝试使用Integer.parseInt对其进行转换

首先需要检查所有字段是否为非空;或者,对整个过程进行尝试/捕获,如果捕获到NumberFormatException,则中止计算


当您捕获到异常时,可以向用户发出输入无效的警告。

1命名时遵循编码约定,以便易于理解代码。 例如,字符串firstNumberString=firstTextBox.getText;读起来比字符串A=TF1.getText要好得多

2您正在从每个文本框中检索文本并尝试对其进行解析。但是如果文本框不包含任何内容,Integer.parseInt方法将抛出一个NumberFormatException,这在您的案例中正在发生

解决方案:验证文本框中的文本

private Boolean validateText(String str)
{
 if ( str == null || str.equals("") ) {
                return false;
            }

            char[] chars = str.toCharArray();
            boolean ok = true;

            for ( int i = 0; i < chars.length; i++ ) {

                try {
                    Integer.parseInt( String.valueOf( chars[i] ) );
                } catch ( NumberFormatException exc ) {
                    ok = false;
                    break;
                }


            }

           return ok;
}

拇指规则:在解析之前,检查null和empty。如果用户没有输入任何内容或字符串,则会出现数字格式异常。
private Boolean validateText(String str)
{
 if ( str == null || str.equals("") ) {
                return false;
            }

            char[] chars = str.toCharArray();
            boolean ok = true;

            for ( int i = 0; i < chars.length; i++ ) {

                try {
                    Integer.parseInt( String.valueOf( chars[i] ) );
                } catch ( NumberFormatException exc ) {
                    ok = false;
                    break;
                }


            }

           return ok;
}