2016-07-03 6 views
0

ある種のグローバルハンドラをインストールして、何らかのクラスがロードされているときに任意の静的ブロックからスローされるExceptionInInitializerErrorをキャッチする必要があります。現在、スタックトレースをstderrにダンプし、アプリケーションを終了します。私は自分のログフレームワークを使ってスタックトレースを記録し、その後アプリケーションを終了したい。出来ますか?ExceptionInInitializerErrorをキャッチするには?

答えて

1

Thread.UncaughtExceptionHandlerはあなたが探しているものです。

このanswerは、より多くの情報を提供します。

本質的には、あなたは、できるだけ早くデフォルトの例外ハンドラをインストールする必要があります。

 Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
     public void uncaughtException(Thread t, Throwable e) { 
      if (e instanceof ExceptionInInitializerError) { 
       // do something with you're exception 
       // and than close application 
       System.exit(-1); // passing 
      } 
     } 
    }); 
+0

おかげで、それが動作します。とにかくJVMが終了するので、System.exitは必要ないと思われるので、ハンドラに例外を記録するだけです。 – vbezhenar

1

たぶん、あなたはグローバルな例外ハンドラを作成することができ、それのあなたの例外をフィルタリングします。

Thread.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() { 
    public void uncaughtException(Thread t, Throwable e) { 
     if (e instanceof ExceptionInInitializerError) { 
      //Your handler code 
     } 
    } 
}); 
関連する問題