14

我正在开发我的第一个 Java 项目,它实现了一个名为“HeartRates”的类,它获取用户的出生日期并返回他们的最大和目标心率。主测试程序中的所有内容都有效,除了一件事,我不知道在捕获异常后如何阻止其余代码打印。

我不太确定捕获异常的整个代码部分,因为它是从教授给我们的内容中复制和粘贴的。如果有人能告诉我如何在发生错误后终止程序,或者打印自定义错误消息并阻止程序进一步执行,我将不胜感激。

这是代码:

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

3 回答 3

18

不太确定为什么要在捕获异常后终止应用程序 - 修复任何错误不是更好吗?

无论如何,在您的 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);
}
于 2012-06-09T21:50:12.747 回答
13

确实,return 会恰好停止该程序的执行(在 main 中)。更一般的答案是,如果您无法在方法中处理特定类型的异常,您应该声明您抛出所述异常,或者您应该用某种 RuntimeException 包装您的异常并将其抛出到更高层。

System.exit() 在技术上也有效,但在更复杂的系统的情况下应该避免(您的调用者可能能够处理异常)。

tl;博士版本:

catch(Exception e)
{
    throw new RuntimeException(e);
}
于 2012-06-09T21:56:52.960 回答
12

catch块中,使用关键字return

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

或者也许你想把最后一个JOptionPane.showMessageDialog放在块的末尾try

于 2012-06-09T21:49:25.223 回答