如果IApplication.start返回IApplication.EXIT_RESTART,則將重新啓動基於3. *的RCP應用程序。類E4Application似乎總是返回EXIT_OK。如何重新啓動e4 RCP應用程序
org.eclipse.ui.IWorkbench也有一個重啓方法,org.eclipse.e4.ui.workbench.IWorkbench沒有。
那麼如何重新啓動e4 RCP應用程序?
如果IApplication.start返回IApplication.EXIT_RESTART,則將重新啓動基於3. *的RCP應用程序。類E4Application似乎總是返回EXIT_OK。如何重新啓動e4 RCP應用程序
org.eclipse.ui.IWorkbench也有一個重啓方法,org.eclipse.e4.ui.workbench.IWorkbench沒有。
那麼如何重新啓動e4 RCP應用程序?
Eclipse 4.2中的當前實現會生成一個id爲org.eclipse.ui.file.restartWorkbench的命令,最終導致處理器類RestartWorkbenchHandler。這個類實現如下
public Object execute(ExecutionEvent event){
PlatformUI.getWorkbench().restart();
return null;
}
這意味着,它是Eclipse的依賴3.x中,作爲PlatformUI類不是在純Eclipse的4基於應用程序中可用了。所以如果你想在你的e4應用程序中解決這個任務,創建一個命令,實現處理程序,並且目前你將有一些E3代碼依賴性!
直到此功能引入到e4我的解決方法如下所示:我使用我的IApplication實現作爲E4Application的包裝。這樣,我可以從start方法返回IApplication.EXIT_RESTART,Equniox將重新啓動。
請注意,這個解決方法使用了一個內部API,這在未來可能會改變!
package de.emsw.gosa.e4.application;
import org.eclipse.e4.ui.internal.workbench.swt.E4Application;
import org.eclipse.equinox.app.IApplication;
import org.eclipse.equinox.app.IApplicationContext;
public class MyE4Application implements IApplication {
private static MyE4Application instance;
public static MyE4Application getInstance() {
return instance;
}
private Integer exitRet = IApplication.EXIT_OK;
private E4Application e4app;
public void setRestart() {
exitRet = IApplication.EXIT_RESTART;
}
@Override
public Object start(IApplicationContext context) throws Exception {
instance = this;
e4app = new E4Application();
e4app.start(context);
return exitRet;
}
@Override
public void stop() {
e4app.stop();
}
}
當你要重新啓動,現在你可以使用Singleton設置返回值:
@Execute
public void execute(IWorkbench workbench) {
MyE4Application.getInstance().setRestart();
workbench.close();
}
我用一個Singleton在這裏,因爲它更容易解釋這種方式。更好的解決方案是將您的IApplication註冊爲OSGi服務,並將DI注入您的處理程序。
org.eclipse.e4.ui.workbench.IWorkbench
在Eclipse Kepler(4.3)中現在有一個restart
方法。