我正在尝试在actionlistener的内部类中使用try / catch语句,但即使我故意触发它们也不会捕获异常。以下是代码摘录:
btnPerformCalculation.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent ae) {
double runtime = Math.abs(Double.parseDouble(txtRunTime.getText()));
double downtime = Math.abs(Double.parseDouble(txtDownTime.getText()));
double blockedtime = Math.abs(Double.parseDouble(txtBlockedTime.getText()));
double lineefficiency = 100 * runtime / (runtime + downtime + blockedtime);
try {
txtEfficiencyAnswer.setText(String.format("%.2f", lineefficiency));
} catch (Exception e) {
JOptionPane.showMessageDialog(frame, "Error:" + e.getMessage());
txtRunTime.setText("0");
txtDownTime.setText("0");
txtBlockedTime.setText("0");
}
}
});
答案 0 :(得分:0)
首先,您如何确定JOptionPane.showMessageDialog没有抛出异常?我建议将输出或日志记录作为catch中的第一个语句。其次,并非所有“异常”都是异常的子类。尝试使用catch(Throwable e)来查看您遇到的具体问题是否得到解决。
我不建议在你的代码中保留catch(Throwable e),因为这样会遇到非常低级别的jvm问题。但它至少可以帮助你了解正在发生的事情。
答案 1 :(得分:0)
您要捕捉的唯一例外是txtEfficiencyAnswer.setText(String.format("%.2f", lineefficiency));
。所有其他计算(例如,将可能为空的文本值转换为双精度值在try-block之前完成,因此不会被捕获。
假设txtEfficiencyAnswer
是JTextComponent
或JLabel
,如果NullPointerException
,则该块中例外的唯一明显原因是txtEfficiencyAnswer
是null
。如果它不为null,那么你永远不会进入catch-block。
答案 2 :(得分:-3)
可能setText
抛出RuntimeException
。
catch (RuntimeException e)