Sajad
Sajad

Reputation: 2363

method flow control

I have a form that give Fname and Lname and Date and a method to write this information to a file.

If Fname or Lname contain digit, the program should display an error message and not run all below statements ,(like write to file and generate random number and...), and not exit. since i dont know how to do like this, in my code i write if Fname or Lname have digit, exit !

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

please help!

Upvotes: 1

Views: 123

Answers (5)

Foggzie
Foggzie

Reputation: 9821

In your if statements, instead of

System.exit(1);

You should have something

throw new MyException("Error Text");

and then your catch should look like this:

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

where MyException extends Exception.

Upvotes: -1

Usman Saleem
Usman Saleem

Reputation: 1655

    if(havedigit(getFName())==true) { 
        System.exit(1);
    }
    setLName(jTextField2.getText());
    if(havedigit(lastName)==true) {
        System.exit(1);
    }

should be

    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
    }

Search on Google about how to use JOptionPane.showMessageDialog.

Upvotes: 0

mishadoff
mishadoff

Reputation: 10789

That's why you need checked exceptions. Just throw SomeException instead of System.exit(1) and process it properly in block:

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

Don't think that catching all exceptions is a good idea.

Upvotes: 2

jahroy
jahroy

Reputation: 22692

Here's one way you could do it:

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

Upvotes: 1

mprivat
mprivat

Reputation: 21902

As a general rule, try to stay away from using System.exit() in GUI-driven applications. It'll just make the whole program quit, leaving the user wondering what happened. System.exit() is usually better suited for command line applications that want to provide an exit code to the shell and it's a parallel to the system exit calls available in most operating systems.

Try this:

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

Upvotes: 1

Related Questions