1

我有一个表格,它给出了一个Fname和一个将这些信息写入文件的方法。LnameDate

如果FnameLname包含数字,则程序应显示错误消息并且不运行以下所有语句(例如写入文件并生成随机数和...),并且不退出。因为我不知道该怎么做,所以在我的代码中我写如果 Fname 或 Lname 有数字,退出!

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)   {                                         
    try{
        setFName(jTextField1.getText());
        if(havedigit(getFName())==true) { 
            System.exit(1);
        }
        setLName(jTextField2.getText());
        if(havedigit(lastName)==true) {
            System.exit(1);
        }
        WriteToFile(getFName());
        WriteToFile(getLName());
        setDate(Integer.parseInt(jTextField3.getText()));
        WriteToFile(String.valueOf(getDate()));
        Random rnd1=new Random();
        Registration_Number=rnd1.nextInt(100);
        setRegNum(Registration_Number);
        WriteToFile(String.valueOf(getRegNum()));
        jLabel6.setText(String.valueOf(getRegNum()));
    }
    catch(Exception e){
        jLabel6.setText("Error!");
    }
}                                        

public boolean havedigit(String in){
    for(int i=0;i<in.length();i++){
        if(Character.isDigit(in.charAt(i)))  return true;
    }
    return false;
}

请帮忙!

4

5 回答 5

2

这就是为什么你需要检查异常。只需抛出SomeException而不是System.exit(1)在块中正确处理它:

catch (SomeException e){
    jLabel6.setText("Error!");
}

不要认为捕获所有异常是一个好主意。

于 2012-12-19T23:17:09.623 回答
1

作为一般规则,尽量不要System.exit()在 GUI 驱动的应用程序中使用。它只会让整个程序退出,让用户想知道发生了什么。System.exit()通常更适合希望向 shell 提供退出代码的命令行应用程序,并且它与大多数操作系统中可用的系统退出调用并行。

试试这个:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)   {                                         
    try{
        setFName(jTextField1.getText());
        if(havedigit(getFName())) { 
            jLabel6.setText("First name error!");
            return;
        }
        setLName(jTextField2.getText());
        if(havedigit(lastName)) {
            jLabel6.setText("Last name error!");
            return;
        }
        WriteToFile(getFName());
        WriteToFile(getLName());
        setDate(Integer.parseInt(jTextField3.getText()));
        WriteToFile(String.valueOf(getDate()));
        Random rnd1=new Random();
        Registration_Number=rnd1.nextInt(100);
        setRegNum(Registration_Number);
        WriteToFile(String.valueOf(getRegNum()));
        jLabel6.setText(String.valueOf(getRegNum()));
    }
    catch(Exception e){
        jLabel6.setText("Error!");
    }
} 
于 2012-12-19T23:13:08.440 回答
1

这是您可以做到的一种方法:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt)   {                                         

    try{
        setFName(jTextField1.getText());
        setLName(jTextField2.getText());
        boolean firstNameHasDigit = havedigit(getFName());
        boolean lastNameHasDigit = havedigit(getLName());
        if (firstNameHasDigit || lastNameHasDigit) {
            jLabel6.setText("Names cannot contain digits");
        }
        else {
            WriteToFile(getFName());
            WriteToFile(getLName());
            setDate(Integer.parseInt(jTextField3.getText()));
            WriteToFile(String.valueOf(getDate()));
            Random rnd1=new Random();
            Registration_Number=rnd1.nextInt(100);
            setRegNum(Registration_Number);
            WriteToFile(String.valueOf(getRegNum()));
            jLabel6.setText(String.valueOf(getRegNum()));
        }
    }
    catch(Exception e){
        jLabel6.setText("Error!");
    }
}                                        

public boolean havedigit(String in){
    for(int i=0;i<in.length();i++){
        if(Character.isDigit(in.charAt(i)))  return true;
    }
    return false;
}
于 2012-12-19T23:13:24.520 回答
0
    if(havedigit(getFName())==true) { 
        System.exit(1);
    }
    setLName(jTextField2.getText());
    if(havedigit(lastName)==true) {
        System.exit(1);
    }

应该

    if(havedigit(getFName())) { 
        JOptionPane.showMessageDialog(.....);
        return; //get out of method, no need to continue
    }
    setLName(jTextField2.getText());
    if(havedigit(lastName)) {
        JOptionPane.showMessageDialog(.....);
        return; //get out of method, no need to continue
    }

在 Google 上搜索如何使用 JOptionPane.showMessageDialog。

于 2012-12-19T23:28:02.593 回答
-1

在您的 if 语句中,而不是

System.exit(1);

你应该有东西

throw new MyException("Error Text");

然后你的捕获应该是这样的:

catch(MyException e){
    jLabel6.setText(e.getMessage());
}

其中 MyException 扩展了异常。

于 2012-12-19T23:17:24.787 回答