我正在开发我的第一个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);
}
答案 0 :(得分:14)
不确定为什么要在捕获到异常后终止应用程序 - 修复出错的地方不是更好吗?
无论如何,在你的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);
}
答案 1 :(得分:10)
在catch
区块中,使用关键字return
:
catch(Exception e)
{
e.printStackTrace();
return; // also you can use System.exit(0);
}
或者您可能希望将最后JOptionPane.showMessageDialog
放在try
块的末尾。
答案 2 :(得分:10)
确实会发生停止执行此程序的回复(在主程序中)。更一般的答案是,如果你不能在方法中处理特定类型的异常,你应该声明你抛出所述异常,或者你应该用某种RuntimeException包装你的Exception并将它扔到更高层。 / p>
System.exit()在技术上也可以工作,但是在更复杂的系统中应该可以避免(你的调用者可能能够处理异常)。
tl; dr版本:
catch(Exception e)
{
throw new RuntimeException(e);
}