0

私はtry/catch文を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"); 
     } 
    } 
}); 
+2

あなたは、まずあなたは? –

+5

を使用している言語の質問にタグ付けしてくださいだろう、あなたはのスタックトレースを投稿することができます例外 – MahdeTo

+2

tryから例外がスローされ、その前の行で行われたすべての変換ではありませんか? – bluesman

答えて

0

キャッチしている唯一の例外はtxtEfficiencyAnswer.setText(String.format("%.2f", lineefficiency));です。他のすべての計算(例えば倍にヌルテキスト値を試して、ブロックの前に行われ、そのため捕捉されない可能性が変換する。

txtEfficiencyAnswerは、そのブロック内の例外のための唯一の明白な理由JTextComponentJLabelのいずれかであると仮定すると、 NullPointerExceptiontxtEfficiencyAnswer場合nullあることでしょう。それがnullでない場合は、あなたがキャッチブロックに入ることはありません。

+0

ありがとうございます。応答するには、txtEfficiencyAnswerはJTextFieldです。 IDEは、プログラムが数値を期待しているときに文字を配置してプログラムをテストするので、NumberFormatExceptionであると言います。プログラムの数値を入力するとうまく動作します。私はNumberFormatExceptionでtryキャッチを試みますが、それでも例外は処理されません。私が言ったように – ForgottenKahz

+0

@ForgottenKahz: "他のすべての計算(たとえば、nullの可能性があるテキスト値を倍精度に変換することはtryブロックの前で行われるため、捕捉されません")。 NumberFormatException。 –

+0

try/catch文が正しく動作する結果になるように、try文を二重解析する文字列を含むようにtry文を移動しました。 – ForgottenKahz

-3

おそらくsetTextスローRuntimeException:ここでのコードの抜粋です。 catch (RuntimeException e)

  • プリントスタックトレースに

    1. 変更catch文。
  • +3

    'RuntimeException'は' Exception'を拡張します。 –

    0

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

    非常に低いレベルのjvmの問題も捕捉するので、catch(Throwable e)をコードに残すことはお勧めできません。しかし、少なくとも、あなたは何が起こっているのか理解するのを助けるでしょう。

    +0

    (Throwable e)は動作しませんでしたが、試してみる価値がありました。プログラムがクラッシュした後、IDEにNumberFormatExceptionの説明があります。私はJOptionPane.showMessageDialogをコメントアウトし、代わりにシンプルなSystem.out.Println()を配置しました。同じ問題。プログラムがクラッシュし、IDEのダイアログでNumberFormatExceptionが発生しました。この問題の原因は、私が意図的に、数字以外の何かをフィールドに入力して、捕まえたいバグを引き起こしたときです。 – ForgottenKahz

    +0

    @bluesmanが示唆しているように、それは 'try'ブロックの前にコードによって例外が発生していることを明らかにします。 –

    +0

    数値書式エラーは、try/catchブロックのtry部分の前に発生していました。私がtry {}を動かすとすぐに、プログラムは文字列からdouble型の解析に変換された数値形式の例外をキャッチしました。 – ForgottenKahz

    関連する問題