2012-11-07 88 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(); 
      } 
    }); 
} 

它記錄異常在我的日誌文件,並退出應用程序。但它顯然是不正確的,並且在控制檯中顯示兩次異常,因爲我所做的只是攔截在用戶的gui dialog中顯示的異常。那麼我該如何正確地覆蓋/更改全局異常處理,以便使用我的代碼(日誌)而不是默認的?

回答

2

感謝桑比Reddy的尖端現在我已經覆蓋AbstractStatusHandler在ApplicationWorkbenchAdvisor類

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

MyStatusHandler延伸AbstractStatusHandler,我已經覆蓋手柄方法是這樣:

@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(); 
    } 
} 

似乎正常工作,只有下行是t我仍然得到2個控制檯輸出。

2

我會建議你使用org.eclipse.ui.statusHandlers擴展點