2012-06-09 11 views
9

Ich arbeite an meinem ersten Java-Projekt, das eine Klasse namens "HeartRates" implementiert, die das Geburtsdatum des Benutzers annimmt und die maximale und die Zielherzfrequenz zurückgibt. Alles im Haupttestprogramm funktioniert bis auf eine Sache, ich kann nicht herausfinden, wie man den Rest des Codes vom Drucken stoppt, nachdem die Ausnahme abgefangen wurde.Ausnahme abgefangen, aber Programm läuft weiter

Ich bin nicht wirklich sicher über den gesamten Teil des Codes, wo die Ausnahme gefangen ist, weil es kopiert und eingefügt wurde, was der Professor uns gab. Wenn jemand mir sagen kann, wie man das Programm beendet, nachdem ein Fehler auftritt, oder eine benutzerdefinierte Fehlermeldung ausspreche und das Programm davon abhalte, weiter auszuführen, würde ich es begrüßen. Hier

ist der 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); 
} 
+0

setzen die 'showMessageDialog' innen' try {} 'Block –

Antwort

13

Nicht wirklich sicher, warum Sie die Anwendung beenden möchten, nachdem die Ausnahme gefangen ist - wäre es nicht besser zu beheben, was schief gelaufen ist?

Auf jedem Fall in Ihrem Fang 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); 
} 
+0

Danke, das hat genau das gemacht, wonach ich gesucht habe. Ich verstehe, was Sie meinen, und es wäre wahrscheinlich besser, aber für den Zweck dieses Projekts war es nicht erforderlich, einen Fehler zu beheben, so dass ich es so belasse wie es ist. – Mike

9

Im catch Block, verwenden Sie das Schlüsselwort return:

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

oder vielleicht wollen Sie das letzte JOptionPane.showMessageDialog am Ende des try Block setzen.

+0

, was ist der Unterschied zwischen ... exit (0) und ... Ausfahrt (1)? –

7

Es ist wahr, dass die Rückkehr passieren würde die Ausführung dieses Programms (die in main) zu stoppen. Die allgemeinere Antwort wäre, wenn Sie einen bestimmten Ausnahmetyp in einer Methode nicht behandeln können, sollten Sie entweder deklarieren, dass Sie die Ausnahme werfen, oder Sie sollten Ihre Exception mit einer Art RuntimeException umhüllen und diese auf die höhere Ebene werfen.

System.exit() funktioniert auch technisch, aber im Falle eines komplexeren Systems sollte wahrscheinlich vermieden werden (Ihr Anrufer kann in der Lage sein, die Ausnahme zu behandeln).

tl; dr Version:

catch(Exception e) 
{ 
    throw new RuntimeException(e); 
}