Оператор Try / Catch не перехватывает исключения - PullRequest
0 голосов
/ 15 марта 2012

Я пытаюсь использовать оператор try / catch внутри внутреннего класса actionlistener, но он не перехватывает исключения, даже когда я их намеренно запускаю.Вот выдержка из кода:

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 голосов
/ 15 марта 2012

Во-первых, как вы уверены, что JOptionPane.showMessageDialog не выдает исключение?Я рекомендую поставить вывод или запись в журнал в качестве первого утверждения в вашем улове.Во-вторых, не все «исключения» являются подклассами исключения.Попробуйте использовать catch (Throwable e), чтобы увидеть, решена ли конкретная проблема, с которой вы столкнулись.

Я не рекомендую оставлять в вашем коде catch (Throwable e), так как это также улавливает проблемы с jvm очень низкого уровня.,Но это, по крайней мере, поможет вам понять, что происходит.

0 голосов
/ 15 марта 2012

Единственные исключения, которые вы ловите, находятся в txtEfficiencyAnswer.setText(String.format("%.2f", lineefficiency));. Все остальные вычисления (например, преобразование, возможно, нулевых текстовых значений в double) выполняются перед блоком try и, следовательно, не перехватываются.

Предполагая, что txtEfficiencyAnswer является JTextComponent или JLabel, единственной очевидной причиной исключения в этом блоке будет NullPointerException, если txtEfficiencyAnswer равно null. Если оно не равно нулю, вы никогда не войдете в блок catch.

0 голосов
/ 15 марта 2012

Вероятно setText Бросок RuntimeException.

  1. Измените оператор catch на catch (RuntimeException e)
  2. Печать трассировки стека.
...