Try / Catch语句没有捕获异常

时间:2012-03-15 02:50:54

标签: java exception nullpointerexception try-catch numberformatexception

我正在尝试在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");
        }
    }
});

3 个答案:

答案 0 :(得分:0)

首先,您如何确定JOptionPane.showMessageDialog没有抛出异常?我建议将输出或日志记录作为catch中的第一个语句。其次,并非所有“异常”都是异常的子类。尝试使用catch(Throwable e)来查看您遇到的具体问题是否得到解决。

我不建议在你的代码中保留catch(Throwable e),因为这样会遇到非常低级别的jvm问题。但它至少可以帮助你了解正在发生的事情。

答案 1 :(得分:0)

您要捕捉的唯一例外是txtEfficiencyAnswer.setText(String.format("%.2f", lineefficiency));。所有其他计算(例如,将可能为空的文本值转换为双精度值在try-block之前完成,因此不会被捕获。

假设txtEfficiencyAnswerJTextComponentJLabel,如果NullPointerException,则该块中例外的唯一明显原因是txtEfficiencyAnswernull。如果它不为null,那么你永远不会进入catch-block。

答案 2 :(得分:-3)

可能setText抛出RuntimeException

  1. 将catch语句更改为catch (RuntimeException e)
  2. 打印stacktrace。