如果IApplication.start返回IApplication.EXIT_RESTART,将重新启动基于3. *的RCP应用程序。 E4Application类似乎总是返回EXIT_OK。
org.eclipse.ui.IWorkbench也有一个重启方法,org.eclipse.e4.ui.workbench.IWorkbench没有。
那么如何重新启动e4 RCP应用程序呢?
答案 0 :(得分:2)
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代码依赖项!
答案 1 :(得分:2)
在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注入您的处理程序。
答案 2 :(得分:2)
org.eclipse.e4.ui.workbench.IWorkbench
现在在Eclipse Kepler(4.3)中有一个restart
方法。
答案 3 :(得分:0)
您可以尝试
{{1}}