Этот поток интересен в этом отношении (он объясняет, почему он работает, когда RCP запускается из затмения, а не при автономной работе)
Если рабочая среда перезапускается, например, через IWorkbench.restart()
, что заставляет PlatformUI.createAndRunWorkbench(...)
вернуть управление приложению (реализация IPlatformRunnable
для расширения приложения) с кодом возврата PlatformUI.RETURN_RESTART
(значение равно 1).
Затем приложение должно сопоставить это с кодом возврата приложения IPlatformRunnable.EXIT_RESTART
(значение равно 23).
Затем он становится кодом выхода виртуальной машины Java (т. Е. System.exit(code)
).
Исполняемый файл eclipse.exe
обнаруживает этот специальный код и перезапускает виртуальную машину Java, используя те же аргументы командной строки, что и в первый раз.
Если вы не используете eclipse.exe
, но запускаете Java-машину непосредственно, она не будет перезагружаться автоматически. Вам нужно будет обработать код выхода самостоятельно.
Таким образом, подобный код в вашем RCP должен быть изменен каким-то средством запуска, чтобы интерпретировать (и перезапустить приложение rcp, если необходимо) существующий код.
(немного похоже на это удаленное управление RCP вики-страница )
WorkbenchAdvisor workbenchAdvisor = new CoreAppWorkbenchAdvisor();
Display display = PlatformUI.createDisplay();
try {
int returnCode = PlatformUI.createAndRunWorkbench(display, workbenchAdvisor);
if (returnCode == PlatformUI.RETURN_RESTART)
return IPlatformRunnable.EXIT_RESTART;
else
return IPlatformRunnable.EXIT_OK;
}
finally {
display.dispose();
}
}