如何重新启动e4 RCP应用程序

问题描述 投票:3回答:4

如果IApplication.start返回IApplication.EXIT_RESTART,则将重新启动基于3. *的RCP应用程序。 E4Application类似乎总是返回EXIT_OK。

org.eclipse.ui.IWorkbench也具有重新启动方法,而org.eclipse.e4.ui.workbench.IWorkbench没有。

那么,如何重新启动e4 RCP应用程序?

eclipse-rcp e4
4个回答
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代码依赖性!


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
投票

[org.eclipse.e4.ui.workbench.IWorkbench现在在Eclipse Kepler(4.3)中确实具有restart方法。


0
投票

您可以尝试这个

    public void restartStudio() {Display.getDefault().asyncExec(new Runnable(){
         @Override
          public void run() {
          PlatformUI.getWorkbench().restart();
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.