2012-03-13 10 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拡張ポイントを使用して、ステータスダイアログの詳細とサポート領域をカスタマイズできます。あなたは、エラー・ログ・ビューの詳細ダイアログのスタックトレースを利用できるようStatus代わりのnullに例外を渡すことで

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 
    } 
} 



:あなたはWorkbenchErrorHandlerを拡張し、configureStatusDialog(...)メソッドをオーバーライドする必要があります。 。

+0

は機能しません。詳細領域にメッセージ(#exception.getMessageによって返された文字列)が2回表示されます。 – CaiNiaoCoder

+0

@CaiNiaoCoderあなたは正しいです、私はそれを最初にチェックしておくべきです!私の答えを更新しました。 –

関連する問題