Java修复文本字段上字符串类型的错误?

时间:2015-05-19 13:48:06

标签: java

我做了一个小的GUI总和程序。程序在空文本字段上工作正常,但问题是当用户在文本字段中输入错误时发生的任何字符串

Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: "a34dsfsdf"

如何修复字符串类型或除数字

之外的任何字符的错误

这是我的代码

private JTextField textfield1;
private JTextField textfield3;
private JTextField textfield4;
private JButton button1;

public ChildClass(){
    super("Frame");
    button1 = new JButton();
    button1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                double number1,baseE,sum;
                String text1=textfield1.getText();
                String text3=textfield4.getText();

                if(text1.isEmpty() && text3.isEmpty()){
                    JOptionPane.showMessageDialog(null, "Enter Values In TextField", "Invalid TextFields", JOptionPane.ERROR_MESSAGE);
                    return;
                }       
                else if(!text3.isEmpty() && !text1.isEmpty()){
                    number1=Double.parseDouble(text1);
                    baseE=Double.parseDouble(text3);

                    result =number1+basE;
                    textfield3.setText(""+result);
                }
            }
    });

2 个答案:

答案 0 :(得分:2)

错误是因为您尝试将字符串解析为double。

这两个电话:

number1=Double.parseDouble(text1);
baseE=Double.parseDouble(text3);

如果你看the documentation

parseDouble可以抛出两个例外:

  • NullPointerException - 如果字符串为空
  • NumberFormatException - 如果字符串不包含可解析的双精度数。

您应该将这些调用放在try catch块中并捕获异常并提示用户输入有效数字的错误。

这样的事情应该有效:

try{
    number1=Double.parseDouble(text1);
    baseE=Double.parseDouble(text3);


    result =number1+basE;
    textfield3.setText(""+result);

}catch(NumberFormatException e){
    JOptionPane.showMessageDialog(null, "Enter Valid Numbers In TextField", "Invalid TextFields", JOptionPane.ERROR_MESSAGE);
}

答案 1 :(得分:1)

我建议你在try catch块中捕获异常。

double number1,baseE,sum;
String text1=textfield1.getText();
String text3=textfield4.getText();

try
{
   number1=Double.parseDouble(text1);
   baseE=Double.parseDouble(text3);
   result=number1+basE;
   textfield3.setText(""+result);
}    
catch (Exception e)
{
  JOptionPane.showMessageDialog(null, "Enter Values In TextField", "Invalid TextFields", JOptionPane.ERROR_MESSAGE);
  return;
}

然后您还可以避免测试空文本字段。空字符串抛出也是一个例外。