0

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

3 に答える 3

0

あなたが捕まえている唯一の例外はにありますtxtEfficiencyAnswer.setText(String.format("%.2f", lineefficiency));。他のすべての計算(たとえば、nullの可能性のあるテキスト値をdoubleに変換することは、try-blockの前に実行されるため、キャッチされません。

それがaまたはaのtxtEfficiencyAnswerいずれかであると仮定すると、そのブロックでの例外の唯一の明白な理由は、 ifがであるということです。nullでない場合は、catch-blockに入ることができません。JTextComponentJLabelNullPointerExceptiontxtEfficiencyAnswernull

于 2012-03-15T14:46:58.470 に答える
0

まず、JOptionPane.showMessageDialogが例外をスローしていないことをどのように確認しますか?キャッチの最初のステートメントとして、出力またはロギングを配置することをお勧めします。次に、すべての「例外」が例外のサブクラスであるとは限りません。catch(Throwable e)を使用して、発生している特定の問題が解決されるかどうかを確認してください。

非常に低レベルのjvmの問題もキャッチするため、コードにcatch(Throwable e)を残すことはお勧めしません。しかし、少なくとも何が起こっているのかを理解するのに役立ちます。

于 2012-03-15T14:20:05.970 に答える
-4

おそらくsetText投げRuntimeExceptionます。

  1. catchステートメントをに変更しますcatch (RuntimeException e)
  2. スタックトレースを出力します。
于 2012-03-15T14:19:31.247 に答える