Eclipse RCP App:如何提示用户设置工作区

Eclipse RCP App: How can I prompt the user to set the workspace

我希望我的 RCP 应用程序始终提示用户输入工作区位置。我可以使用 eclipse.ini 中的 -data arg 或 configuration/config.ini 中的 osgi.instance.area.default 属性 指定默认位置。但我不希望用户必须了解和编辑这些文件中的任何一个才能更改工作区位置。

设置首选项Prompt for workspace on startup 无效。我在一个干净的工作区启动应用程序,没有设置 -data arg 或 osgi.instance.area.default 属性,它会在当前目录中创建一个 workspace 文件夹,并且不会提示select 一个位置。

我在申请中使用了 IDEApplication class 的副本。我看到第 188 行是 start() 之后的第一行 运行,平台位置已经设​​置,这会阻止显示对话框。我不知道为什么在尝试启动 UI 之前就已经设置好了,设置首选项没有任何效果。 (我在 configuration/.settings/org.eclipse.ui.ide.prefs 中验证了 SHOW_WORKSPACE_SELECTION_DIALOG=true)。

我尝试通过添加

重新设置位置
instanceLoc = instanceLoc.createLocation(instanceLoc, null, false);

checkInstanceLocation()的开头。这会启用工作区选择器对话框,但以这种方式设置位置不会影响应用程序在启动时实际用于其实例区域的内容。

我认为我的应用程序中的某些 earlyStartup 代码可能会产生干扰,因为我读到如果您过早访问首选项,您可能会阻止工作区选择器打开。所以我注释掉了少数 earlyStartup 声明,但我仍然无法显示工作区选择器对话框。

问题原来是作为我的 OSGI 服务的依赖项加载的一些 classes 正在访问 class ResourcesPlugin,这导致立即设置工作区位置。由于这是在启动工作区选择器对话框之前发生的,因此使用的位置是 -data arg 的值(如果已指定),否则 $(pwd)/workspace.

我尝试通过调整服务的启动级别来解决问题 plug-in。起始级别为 7 或更高时,工作区选择器对话框不再是 pre-empted。但是,该服务当时无法正常工作。在多次尝试使用自定义启动级别使服务正常工作失败后,我放弃了该方法和 re-worked 我的代码,因此对 ResourcesPlugin 的引用稍后出现在应用程序启动过程中。具体来说,我将它移到了自定义 WorkbenchWindowAdvisor 实现的 postWindowOpen 方法中。