13

I am working on my first Java project implementing a class called "HeartRates" which takes the user's date of birth and returns their max and target heart rate. Everything in the main test program works except for one thing, I can't figure out how to stop the rest of the code from printing after the exception is caught.

I am not really sure about the entire portion of code where the exception is caught because it was copied and pasted from what the professor gave us. If anybody can tell me how to terminate the program after an error occurs, or print a custom error message and stop the program from executing further I would appreciate it.

Here is the code:

 import java.util.Scanner;
 import java.util.GregorianCalendar;

 import javax.swing.JOptionPane;

 public class HeartRatesTest {

public static void main(String[] args) {
    HeartRates test= new HeartRates();
    Scanner input = new Scanner( System.in );
    GregorianCalendar gc = new GregorianCalendar();
    gc.setLenient(false);

        JOptionPane.showMessageDialog(null, "Welcome to the Heart Rate Calculator");;
        test.setFirstName(JOptionPane.showInputDialog("Please enter your first name: \n"));
        test.setLastName(JOptionPane.showInputDialog("Please enter your last name: \n"));
        JOptionPane.showMessageDialog(null, "Now enter your date of birth in Month/Day/Year order (hit enter after each): \n");

        try{
            String num1= JOptionPane.showInputDialog("Month: \n");
            int m= Integer.parseInt(num1);
            test.setMonth(m);
                gc.set(GregorianCalendar.MONTH, test.getMonth());
            num1= JOptionPane.showInputDialog("Day: \n");
            m= Integer.parseInt(num1);
            test.setDay(m);
                gc.set(GregorianCalendar.DATE, test.getDay());
            num1= JOptionPane.showInputDialog("Year: \n");
            m= Integer.parseInt(num1);
            test.setYear(m);
                gc.set(GregorianCalendar.YEAR, test.getYear());

                gc.getTime(); // exception thrown here
        }

        catch (Exception e) {
            e.printStackTrace();
            }   



    String message="Information for "+test.getFirstName()+" "+test.getLastName()+": \n\n"+"DOB: "+ test.getMonth()+"/" +test.getDay()+ "/" 
            +test.getYear()+ "\nAge: "+ test.getAge()+"\nMax Heart Rate: "+test.getMaxHR()+" BPM\nTarget Heart Rate(range): "+test.getTargetHRLow()
            +" - "+test.getTargetHRHigh()+" BPM";
    JOptionPane.showMessageDialog(null, message);
}
Blorgbeard
  • 93,378
  • 43
  • 217
  • 263
Mike
  • 785
  • 3
  • 10
  • 28

3 Answers3

17

Not really sure why you want to terminate the application after the exception is caught - wouldn't it be better to fix whatever went wrong?

In any case, in your catch block:

catch(Exception e) {
    e.printStackTrace(); //if you want it.
    //You could always just System.out.println("Exception occurred.");
    //Though the above is rather unspecific.
    System.exit(1);
}
Michael
  • 1,229
  • 9
  • 14
  • Thank you, this did exactly what I was looking for. I understand what you mean and it probably would be better, but for the purpose of this project it wasn't required to allow for an error fix so I'm leaving it as is. – Mike Jun 09 '12 at 22:26
13

It's true that return would happen to stop the execution of this program (being in main). The more general answer would be if you cannot handle a particular type of exception in a method, you should be either declaring that you throw said exception, or you should wrap your Exception with some kind of RuntimeException and throw that to the higher layer.

System.exit() also technically works, but in the case of a more complex system should likely be avoided (your caller may be able to handle the exception).

tl;dr version:

catch(Exception e)
{
    throw new RuntimeException(e);
}
Charlie
  • 6,696
  • 1
  • 35
  • 44
11

In the catch block, use the keyword return:

catch(Exception e)
{
    e.printStackTrace();
    return; // also you can use System.exit(0);
}

or maybe you want to put the last JOptionPane.showMessageDialog at the end of the try block.

Eng.Fouad
  • 107,075
  • 62
  • 298
  • 390