首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以编程方式创建Eclipse RCP e4交换机工作区

以编程方式创建Eclipse RCP e4交换机工作区
EN

Stack Overflow用户
提问于 2018-11-03 22:30:08
回答 2查看 256关注 0票数 0

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

但这种方法在纯e4应用程序中不起作用,因为应用程序模型发生了变化。

EN

回答 2

Stack Overflow用户

发布于 2018-11-04 00:22:50

这似乎不可能做到这一点。

当您运行一个纯e4应用程序时,主IApplicationorg.eclipse.e4.ui.internal.workbench.swt.E4Application。此代码不支持用于发出需要更改工作空间的信号的特殊返回代码。

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

票数 0
EN

Stack Overflow用户

发布于 2018-11-05 03:50:13

对于这个问题,我有一个解决方案:

e4最大的问题是重新生成的代码不会改变,并且equinox需要一个IApplication.EXIT_RESTART代码。

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

代码语言:javascript
复制
 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();
        }
    }  

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

代码语言:javascript
复制
  <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扩展点(见下文)。

代码语言:javascript
复制
 <product
    name="YourProduct"
    application="FrameworkE4Application">
    <property
        name="appName"
        value="ProductPath">
    </property>
 </product>

下面是一个重启应用程序的操作的实现。

代码语言:javascript
复制
public class RestartApplicationAction {
    @Execute
    public void execute(IWorkbench workbench) {
        FrameworkE4Application.getInstance().setRestartCode();
        workbench.close();
    }
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53132279

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档