2016-07-09 7 views
0

コードに発生した例外をキャッチしてサーバーに送信できるようにするために「すべてをキャッチする」コードを挿入しようとしています。基本的に、以下のコードは私のメインのコードです。これはボタン付きのJframeを作成します。ボタンの1つをクリックすると、クラッシュが発生しています(ヌルポインタの逆参照)。例外は以下のコードでは捕らえられず、その代わりに私のコンソールに表示されます。メインのすべての例外コードをキャッチするイベント例外をキャッチしていません

public static void main(String args[]) { 

     try { 


     java.awt.EventQueue.invokeLater(new Runnable() { 
      public void run() { 

        JFRAME_MAIN = new MainHomePage(); 
        JFRAME_MAIN.setVisible(true); 

      } 
     }); 

     } catch (Exception ex) { 

      System.out.println("Exception caught"); // <--- This is not being hit 
     } 

} 

これをどうやって解決すればいいですか?

おかげ

PS:それはセットアップレイアウトの大きなクラスであり、そのアクションリスナーとボタンを追加したので、私はクラスMainHomePageのコードを入れていませんでし。これらのリスナーの1人で、クラッシュが発生しました

答えて

1

try-catchブロック内のコードによってスローされないため、例外は検出されません。ボタンのクリックはこのコードで処理されず、ActionListenerによって処理されます。リスナーのコードが例外をスローしています。

メソッドは、Runnableをキューに追加するだけで、それを追加する行為は成功し、したがって例外は生成されません。 this pageを参照してください。

ボタンクリックを処理するリスナーコード内にtry-catchを追加すると、例外をキャッチできるはずです - actionPerformedメソッドを探します。 (コメントするには応答)

public void actionPerformed(ActionEvent e) { 
    try{ 
     // your logic here 
    } 
    catch(Exception e){ 
     // do something to handle the exception here 
    } 
} 

EDIT:

あなたはこのような何かを行うことができ、単一の場所ですべてのキャッチされない例外扱いにする場合:

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
    public void uncaughtException(Thread t, Throwable e) { 
     System.out.println("Caught exception: "+e.getClass().getName()); 
     // do something else useful here 
    } 
}); 

をあなたはそれを置くだろうあなたのメインメソッドの中にコード。

+0

ありがとうございました。しかし、私は非常に多くのリスナーkm私のコードを、私はそれぞれの1つに追加する必要がありますか? 1つの場所に追加する方法がないので、アプリケーションによってスローされた例外をキャッチしますか? – Snake

+0

あなたのコメントに答えるために私の答えを編集します。 –

+0

それはそうです。本当にありがとうございます – Snake

関連する問題