Eclipse RCP Launcher忽略退出代码EXIT_RELAUNCH

时间:2015-09-16 22:54:20

标签: eclipse rcp workspace launcher tycho

我有一个RCP应用程序,它公开了启动工作区选择器对话框的OpenWorkspaceAction的菜单贡献。我将其作为独立应用程序(即不是来自IDE)启动,使用工作区切换器选择另一个工作区,然后应用程序退出并且不会重新启动。

我的应用运行应用org.eclispe.ui.ide.workbench,后者使用IDEApplication进行IApplication实施。为了了解发生了什么,我使用IApplication实例创建了我的应用程序,该实例仅扩展IDEApplication并复制子类中IDEApplication#start的代码。我验证在选择新工作区后重新启动时,它会返回退出代码EXIT_RELAUNCH。我还验证了系统属性eclipse.exitdata是按预期设置的,即它将原始启动参数的值-data替换为新的工作空间位置。我还看到系统属性eclipse.exitcode设置为24.这都是在OpenWorkspaceAction中完成的,我只是在应用退出之前验证它。

这似乎表明启动器可执行文件有缺陷。它来自eclipse IDE,我认为,因为我在产品编辑器中选择了使用本机启动器工件的框,然后使用tycho-p2-director插件在tycho中构建产品。但我尝试用我的IDE中的启动器替换启动器可执行文件(它可以正确处理重新启动),还可以使用其他人制作的RCP应用程序中的启动器可执行文件来替换启动器。

我不知道从哪里开始。正确设置所有系统属性以使启动器重新启动,因此启动器似乎确实存在问题。但是用一个在其他应用程序中运行的启动器替换启动器并没有帮助。我还尝试用IDE和工作RCP应用程序替换启动器和原生GTK启动器插件。我没做什么让它重新开始。

我修改了IDEApplication.start()中的退出代码以返回EXIT_RESTART,应用程序重新启动。但是它并不尊重退出数据,因为它以最初使用的相同args重新启动,而不替换-data值。

我的应用程序基于Luna,我尝试用来自Luna和Mars安装的文件替换启动器工件。我在CentOS 6.7上运行

编辑:为了澄清发生了什么,当IDEApplicationEXIT_RELAUNCH方法返回start()时,启动器可执行文件退出。启动程序应该使用系统属性eclipse.exitdata中找到的args再次调用JVM,但它会终止执行。如果start()返回EXIT_RESTART,则启动程序再次调用JVM,但使用原始命令参数,而没有-data的新值,因为它设计为在看到时执行退出状态。所以问题是当退出状态为EXIT_RELAUNCH时,启动程序终止而不是重新启动JVM。

0 个答案:

没有答案