2012-11-07 9 views
6

RCPアプリでグローバル例外処理をオーバーライドしたいと考えています。キャッチされていない例外が発生した場合はいつでもログに記録して(javaログを使用して)、アプリケーションを終了します。私はすでにApplicationWorkbenchAdvisorクラスのeventLoopException(Throwable exception)メソッドを上書きしました。しかし、これはイベントループの例外だけをキャッチします。今のところ、私はまた、このようpostStartup()メソッドを上書きしていますEclipse RCPアプリケーションのグローバル例外処理

public void postStartup() 
{ 
    Policy.setStatusHandler(new StatusHandler() 
    { 
     @Override 
      public void show(IStatus status, String title) 
      { 
      LOGGER.log(Level.SEVERE, "Uncaught Exception", status.getException()); 
      UnexpectedErrorDialog(); 
      PlatformUI.getWorkbench().close(); 
      } 
    }); 
} 

は、それは私のログファイルに例外を記録し、アプリを終了します。しかし、それは明らかに正しくはなく、例外はコンソールに2回表示されます。私が行うことは、ユーザーにgui dialogの例外の表示を傍受しているためです。では、どのようにしてグローバル例外処理を適切に上書き/変更できるので、デフォルトのコードの代わりにコード(ログ)が使用されますか?

答えて

2

おかげであなたをお勧めします:

@Override 
public void handle(StatusAdapter statusAdapter, int style) 
{ 
    if(statusAdapter.getStatus().matches(IStatus.ERROR) && ((style != StatusManager.NONE))) 
    { 
      LOGGER.log(Level.SEVERE, "Uncaught Exception", statusAdapter.getStatus().getException()); 
      UnexpectedErrorDialog(); 
      PlatformUI.getWorkbench().close(); 
    } 
} 

が正しく動作するように見えるだけの欠点があります帽子私はまだ2つのコンソール出力を取得します。

2

私は今

@Override 
public synchronized AbstractStatusHandler getWorkbenchErrorHandler() { 
    if (myStatusHandler == null) { 
     myStatusHandler = new MyStatusHandler(); 
    } 
    return myStatusHandler; 
} 

MyStatusHandlerがAbstractStatusHandlerを拡張し、私はこのようなhandleメソッドを上書きしているApplicationWorkbenchAdvisorクラスでAbstractStatusHandlerを上書きしているorg.eclipse.ui.statusHandlers拡張ポイントを使用するようにsambiのレディの先端に

関連する問題