try / catch块在actionlistener中不起作用

时间:2015-06-13 19:55:52

标签: java user-interface try-catch actionlistener jtextfield

我正在为学校制作2个程序,一个用于获取联系信息并将其保存到文本文件中,另一个用于从文本文件中读取。一切都很完美,但我必须添加一个try / catch块来获取输入的程序,以便它能够捕获age文本字段中的非数字条目。自昨天以来,我一直在尝试许多不同的方法,但没有任何工作。下面是代码。如果有人可以指出我正确的方向,我将非常感激,因为我觉得有一些基本的东西,我没有到这里。感谢

  private class SaveData implements ActionListener{
    public void actionPerformed(ActionEvent e){

            String age1 = (String)ageField.getText();
            int age = Integer.parseInt(age1);

            try{
                int a = age;
            }
            catch(InputMismatchException e1){
                JOptionPane.showMessageDialog(null, "Please enter an     Integer");
            }

            String name = (String)nameField.getText();
            String email = (String)emailField.getText();
            String cell = (String)cellField.getText();  

            if(age>= 0 && age<=120){
                outputFile.println("Name: " + name);
                outputFile.println("Age: " + age);
                outputFile.println("Email: " + email);
                outputFile.println("Cell #: " +cell);
                outputFile.println("---------------------------");

                nameField.setText("");
                ageField.setText("");
                emailField.setText("");
                cellField.setText("");
            }
            else{
                JOptionPane.showMessageDialog(null, "You have entered an invalid age \n " +
                                        "Please enter an age between 0 and 120",
                                                "Age Entry Error",      JOptionPane.ERROR_MESSAGE);

                nameField.setText("");
                ageField.setText("");
                emailField.setText("");
                cellField.setText("");
            }//end else
        }//end actionperformed
    }//end actionlistener

2 个答案:

答案 0 :(得分:2)

只需在try / catch块中写下int age = Integer.parseInt(age1);这些行,然后捕获NumberFormatException例外。

答案 1 :(得分:1)

基本上我看到了三个问题(包括那些你还没有遇到问题的问题):

  • 函数parseInt会引发异常但您没有捕获它,因为它不在try块中。
  • 您正在捕获错误的异常,因此永远不会被捕获。您可以阅读该异常的here的Javadoc。
  • 由于范围规则,变量age无法在try / catch块之外访问。

您应该如何做到这一点:

String age1 = (String)ageField.getText(); int age = -1;//always assign a variable a default value try{ age = Integer.parseInt(age1); } catch(NumberFormatException err){ JOptionPane.showMessageDialog(null, "Please enter a valid Integer!"); }

最后想一想,如果你正在捕获一个异常,那么你应该显示一个错误(你正在做),然后从该函数返回。所以基本上应该在catch块中返回,因为您不想继续执行更多代码。哪个很可能会失败,因为它需要有效的age值。