2012-03-13 77 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