2012-03-13 61 views
5

代碼:Eclipse的StatusManager不顯示細節

Job job = new Job("Connect to Database") { 
      @Override 
      protected IStatus run(IProgressMonitor monitor) { 
       // 即使是在正常的情況下,某些版本的DB2的連接建立時間也比較長。。。 
       monitor.beginTask("正在建立到數據庫的連接 ...", 100); 
       try { 
        Thread.sleep(3000); 
        database = new Database(cp.getName(), cp.getConnection()); 
       } catch (Exception e) { 
        e.printStackTrace(); 
        IStatus sqlErrorStatus = new Status(IStatus.ERROR, "amarsoft.dbmp", e.getMessage(), null); 
        StatusManager.getManager().handle(sqlErrorStatus, StatusManager.SHOW); 
       } 
       monitor.done(); 
       return Status.OK_STATUS; 
      } 
     }; 

enter image description here

我怎樣才能讓它顯示異常的堆棧跟蹤,當用戶點擊「詳細信息」按鈕?

回答

6

狀態對話框的默認詳細信息區域不是顯示異常堆棧跟蹤。

如果您有自己的Eclipse product,那麼您可以使用org.eclipse.ui.statusHandlers擴展點自定義詳細信息並支持狀態對話框的區域。您將需要擴展WorkbenchErrorHandler並覆蓋configureStatusDialog(...)方法:通過異常

void configureStatusDialog(WorkbenchStatusDialogManager statusDialog) { 
    statusDialog.enableDefaultSupportArea(true); 
    statusDialog.setDetailsAreaProvider(new CustomStatusAreaProvider()); 
} 

class CustomStatusAreaProvider extends AbstractStatusAreaProvider { 
    Control createSupportArea(Composite parent, StatusAdapter statusAdapter) { 
     //Create and return details area 
    } 
} 



通過Status,而不是null你提供的信息堆棧跟蹤錯誤日誌查看詳情對話框。

+0

不起作用。它只是在細節區域顯示消息(由#exception.getMessage返回的字符串)兩次。 – CaiNiaoCoder 2012-03-19 10:53:51

+0

@CaiNiaoCoder你是對的,我應該先檢查一下!更新了我的答案。 – 2012-03-19 12:19:37