方法流程控制

时间:2012-12-19 23:06:11

标签: java

我有一个表单,其中包含FnameLname以及Date以及将此信息写入文件的方法。

如果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;
}

请帮忙!

5 个答案:

答案 0 :(得分:2)

这就是您需要已检查例外的原因。只需抛出SomeException而不是System.exit(1)并在块中正确处理它:

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

不要认为捕捉所有异常都是个好主意。

答案 1 :(得分:1)

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

试试这个:

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!");
    }
} 

答案 2 :(得分: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;
}

答案 3 :(得分: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。

的信息

答案 4 :(得分:-1)

在if语句中,而不是

System.exit(1);

你应该有东西

throw new MyException("Error Text");

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

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

MyException扩展了Exception。