尝试/捕获块在操作侦听器中不起作用



我正在为学校开发两个程序,一个是获取联系信息并将其保存到文本文件中,另一个是从文本文件中读取。一切正常,但我必须在接受输入的程序中添加一个 try/catch 块,以便它在年龄文本字段中捕获非数字条目。从昨天开始,我一直在尝试许多不同的方法来做到这一点,但没有任何效果。下面是代码。如果有人能指出我正确的方向,我将不胜感激,因为我觉得我在这里没有找到一些基本的东西。谢谢

  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
只需在

try/catch块中写下这些行int age = Integer.parseInt(age1);并捕获NumberFormatException异常。

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

  • 该函数parseInt引发异常,但您没有捕获它,因为它不在try块中。
  • 您捕获了错误的异常,因此永远不会被捕获。您可以在此处阅读 Javadoc 以了解该例外。
  • 由于范围规则,变量agetry/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值。

相关内容

  • 没有找到相关文章

最新更新