Eclipse RCP e4以编程方式切换工作区

时间:2018-11-03 14:30:08

标签: java eclipse eclipse-rcp e4

我想在代码中的纯rcp e4应用程序中切换工作区。我找到了使用org.eclipse.ui.internal.ide.actions.OpenWorkspaceAction的旧方法。

但是这种方法在纯e4应用程序中不起作用,因为应用程序模型已更改。

2 个答案:

答案 0 :(得分:0)

似乎不可能做到这一点。

运行纯e4应用程序时,主IApplicationorg.eclipse.e4.ui.internal.workbench.swt.E4Application。该代码不支持用于指示需要更改工作空间的特殊返回码。

您可以通过调用IWorkbench.restart重新启动现有的工作台。 IWorkbenchorg.eclipse.e4.ui.workbench.IWorkbench,可以注入。

答案 1 :(得分:0)

我已经解决了这个问题:

e4的最大问题是重试代码将不会更改,并且春分需要IApplication.EXIT_RESTART代码。

解决方法: -首先实现IApplication接口(请参见下面的代码)

 public class FrameworkE4Application implements IApplication {
        private static FrameworkE4Application application;
        private Integer exit_code = IApplication.EXIT_OK;
        private E4Application e4Application;

        public static FrameworkE4Application getInstance() {
            return application;
        }

        public void setRestartCode() {
            exit_code = IApplication.EXIT_RESTART;
        }

        @Override
        public Object start(IApplicationContext context) throws Exception {
            application = this;
            e4Application = new E4Application();
            e4Application.start(context);
            return exit_code;
        }

        @Override
        public void stop() {
            e4Application.stop();
        }
    }  

然后,您需要向春分注册您的自定义实现。为此,请扩展org.eclipse.core.runtime.applications扩展点(请参见下文)。

  <extension id="FrameworkE4Application"
      point="org.eclipse.core.runtime.applications"> 
      <application> 
         <run  class="FrameworkE4Application"> 
            <parameter name="optimize" value="true"/> 
         </run> 
       </application> 
   </extension> 

如果您要以产品的形式启动,则需要改写org.eclipse.core.runtime.products扩展点(请参见下文)。

 <product
    name="YourProduct"
    application="FrameworkE4Application">
    <property
        name="appName"
        value="ProductPath">
    </property>
 </product>

这是重新启动应用程序的操作的实现。

public class RestartApplicationAction {
    @Execute
    public void execute(IWorkbench workbench) {
        FrameworkE4Application.getInstance().setRestartCode();
        workbench.close();
    }
}

现在您可以设置新的位置,并使用新的工作区重新启动应用程序。