2014-04-28 27 views
0

我正在開發Eclipse 4 RCP應用程序,我需要它在可見之前完成一些任務,然後重新啓動。在Eclipse 4 RCP應用程序可見之前重新啓動它

我正在運行檢查P2存儲庫並自動更新/安裝/卸載某些插件的應用程序。我希望這一步對用戶是透明的,所以我使用LifeCycleURI屬性在「postContextCreate」方法中運行這個步驟。

完成此操作後,我需要重新啓動應用程序(以便正確加載插件),但由於尚未創建,因此無法在此注入工作臺。我將不勝感激任何建議或想法。

提前致謝!

回答

0

可能最早可以獲得工作臺的方式是通過訂閱應用程序啓動完成事件UIEvents.UILifeCycle.APP_STARTUP_COMPLETE與事件代理。但是,只有在顯示UI後纔會觸發。

更新: 事件處理會是這樣的:

private static final class AppStartupCompleteEventHandler implements EventHandler 
{ 
    private final IEclipseContext _context; 

    AppStartupCompleteEventHandler(final IEclipseContext context) 
    { 
    _context = context; 
    } 

    @Override 
    public void handleEvent(final Event event) 
    { 
    IWorkbench workbench = _context.get(IWorkbench.class); 

    workbench.restart(); 
    } 
} 

訂閱此事件在@PostContextCreate方法。

@PostContextCreate 
public void postContextCreate(IEclipseContext context, IEventBroker eventBroker) 
{ 
    eventBroker.subscribe(UIEvents.UILifeCycle.APP_STARTUP_COMPLETE, new AppStartupCompleteEventHandler(context)); 
} 
+0

我怎麼能從那裏得到工作臺?我無法使用「PlatformUI.getWorkbench()」,因爲我運行的是純E4應用程序。我也嘗試使用「new EventHandler(){...}」來訂閱該事件,並試圖將IWorkBench作爲字段注入,但它爲空(因爲EventHandler是在WorkBench之前創建的,我想) 。非常感謝你! – rubenrumu

+0

您將事件處理程序傳遞給IEclipseContext,當事件觸發時,上下文將包含IWorkbench - 我用來測試這個的添加示例。 –

+0

這對我來說非常合適。謝謝! – rubenrumu

相關問題