У меня есть решение этой проблемы:
Большая проблема с 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();
}
}
Теперь вы можете установить новое местоположение и перезапустить приложение с новым рабочим пространством.