对于输入字符串:“”填写文本字段时

时间:2013-05-09 21:49:47

标签: java actionlistener numberformatexception

我正在用Java编写一个程序,我有一些文本字段和一个按钮。

即使我在运行程序时填写了所有文本字段,但我得到java.lang.NumberFormatException: For input string: ""

我的代码看起来像这样:

button.addActionListener(new ActionListener() {
    @Override
    public void actionPerformed(ActionEvent e) {
        method();
    }
}
            );




public void method() { 
    try { 
        String string1 = textfield1.getText();
        String string2 = textfield2.getText();
        String string3 = textfield3.getText();
        if ( string1.length() == 0 || string2.length() == 0 || string3.length() == 0) { 
            System.out.println("fill in the required text fields");
            return;
        } 
        int number = Integer.parseInt(textfield3.getText());
        //do something
    }
    catch ( NumberFormatException e ) { 
        System.out.println("Wrong format");
    }
}

修改

See more code here

1 个答案:

答案 0 :(得分:2)

我已对您的程序进行了一些测试,但由于创建了面板并切换了哪一个处于活动状态,因此文本字段存在问题。

在构造函数中,您调用了创建JTextField的something()方法。单击该按钮后,再次调用something()并生成一个新的JTextField,您也可以将其添加到面板中。

因此,GUI上的两个JTextField在完全相同的位置,但只引用其中一个(最后一个创建)。

当您单击将调用method()的按钮时。隐藏的TextField被要求提供他的文本(这是它在我的电脑上的工作原理),这总是空的,因为我只能写入我看到的那个。

一个简单的解决方法是更改​​方法actionPerformed:

@Override
public void actionPerformed( ActionEvent e ) {
    if ( e.getSource() == button1 ) {
        present = something;
        button1.setVisible(false);
        //something();
        visiblePanel();
        previous = something;
    }

}

所以我避免了新的JTextField创建,但是visiblePanel()确保显示TextField和第二个按钮。

在此更改后,我可以输入“sadda”按下按钮并看到输出“Numberformatexception”。当我输入数字时,我什么也看不见,因此格式化工作正常。