-->

HOWTO重启的E4 RCP应用程序(Howto restart an e4 RCP applica

2019-09-24 02:29发布

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

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

所以,我怎么可以重新启动的E4 RCP应用程序?

Answer 1:

在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代码依赖!



Answer 2:

直到这个功能被引入到E4我的解决办法是这样的:我用我的IApplication实现作为一个包装的E4Application。 这样一来,我可以从一开始就方法中返回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();
}

我用了一个单身在这里,因为它更容易解释这种方式。 一个更好的解决方案是注册IApplication作为OSGi服务,并有DI注入到你的处理程序。



Answer 3:

org.eclipse.e4.ui.workbench.IWorkbench确实现在有一个restart Eclipse中开普勒(4.3)的方法。



文章来源: Howto restart an e4 RCP application