我想在代码中切换一个纯rcp e4应用程序中的工作区。我找到了使用org.eclipse.ui.internal.ide.actions.OpenWorkspaceAction的旧方法。
但这种方法在纯e4应用程序中不起作用,因为应用程序模型发生了变化。
发布于 2018-11-04 00:22:50
这似乎不可能做到这一点。
当您运行一个纯e4应用程序时,主IApplication是org.eclipse.e4.ui.internal.workbench.swt.E4Application。此代码不支持用于发出需要更改工作空间的信号的特殊返回代码。
您可以通过调用IWorkbench.restart重新启动现有的工作台。IWorkbench是可以注入的org.eclipse.e4.ui.workbench.IWorkbench。
发布于 2018-11-05 03:50:13
对于这个问题,我有一个解决方案:
e4最大的问题是重新生成的代码不会改变,并且equinox需要一个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();
}
} 然后,您需要向equinox注册您的自定义实现。为此,扩展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();
}
}现在,您可以设置新位置并使用新工作区重新启动应用程序。
https://stackoverflow.com/questions/53132279
复制相似问题