2012-06-09 20 views
9

私は最初のJavaプロジェクトで、 "HeartRates"というクラスを実装しています。これは、ユーザーの生年月日と最大と目標の心拍数を返します。主なテストプログラムの中のすべては、例外を捕まえた後に、コードの残りの部分を印刷から止める方法を理解できません。例外がキャッチされたが、プログラムが実行され続ける

教授が私たちから与えたものからコピーされて貼り付けられたため、例外が検出された部分のコードについてはわかりません。エラーが発生した後にプログラムを終了する方法を教えてもらえれば、あるいはカスタムエラーメッセージを表示して、プログラムをさらに実行しなくてもいいと思う人は、感謝します。

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

または多分あなたはtryブロックの最後に最後JOptionPane.showMessageDialogを入れたい:キーワードreturnを使用し、catchブロックで

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

は 'しようと{}'ブロック –

答えて

13

例外がキャッチされた後にアプリケーションを終了する理由がわからないのは間違ったことを修正する方がいいでしょうか?あなたのcatchブロックでいずれの場合も

、:

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

ありがとう、これはまさに私が探していたものでした。私はあなたが何を意味しているのか理解していますが、おそらくもっと良いでしょうが、このプロジェクトの目的上、エラー修正を許可する必要はありませんでしたので、そのまま残しておきます。 – Mike

9

:ここ

はコードです。

+0

間...終了違いは何でしょう(0)と...終了(1)内部 'showMessageDialog'を置きますか? –

7

それはリターンが(メインである)、このプログラムの実行を停止するために起こることは事実です。より一般的な答えは、メソッド内で特定の型の例外を処理できない場合に、例外をスローすると宣言するか、Exceptionを何らかの種類のRuntimeExceptionでラップして上位層にスローする必要があります。

System.exit()も技術的には機能しますが、複雑なシステムの場合は避けるべきです(呼び出し元が例外を処理できる可能性があります)。

TL; DRのバージョン:

catch(Exception e) 
{ 
    throw new RuntimeException(e); 
} 
関連する問題