我正在开发一个带有首选项页面的Eclipse插件,performOk()
方法会改变其他一些插件的首选项以适应更改。到目前为止工作得很好。
但是,如果用户手动更改我的插件的prefs文件或更新插件,他必须转到首选项页面并手动按“确定”,否则其他插件的首选项将过期。
我想通过调整Eclipse每次启动时的其他插件首选项来避免此问题。我已经让我的插件类实现了IStartup
接口及其earlyStartup()
方法来改变那里的首选项,但我有两个问题:
我需要在更改其他插件的首选项之前从我自己的插件中读取设置,但getPreferenceStore()
方法在earlyStartup()
方法中不起作用。我能够通过实现earlyStartup()
清空并在插件的start()
方法中执行我想要的操作来解决这个问题,这种行为是否可靠?
在实际更改start()
方法中的偏好设置时,我得到无效的线程访问异常。我已经读过start()
由自己的工作执行,工作可以改变偏好吗?
如果有另一种方法可以实现我想要的,我自然也想知道。
答案 0 :(得分:3)
如果您主要担心某人是从某个导出的eclipse首选项文件导入某些更改,那么您应该能够通过使用首选项更改的侦听器来解决问题。这将处理您上面提到的情况。如果首选项通过Eclipse更改,并且在eclipse打开时,则会激活您的首选项更改侦听器。
我从来没有听说过有人在eclipse之外手动编辑他们的偏好文件(这是一个偏好改变了侦听器不会捕获的情况)。如果有人这样做,他们就不应该期待可靠的行为。
但是,如果你真的想使用IEarlyStartup,你可以,但你应该使用Display.synchExec()来执行首选项更改代码。请参阅:http://help.eclipse.org/helios/index.jsp?topic=/org.eclipse.platform.doc.isv/reference/api/org/eclipse/core/runtime/preferences/AbstractPreferenceInitializer.html
答案 1 :(得分:0)
有一个扩展点org.eclipse.core.runtime.preferences
。您可以使用此选项为插件的首选项存储中的任何首选项设置默认值。您可以使用此扩展点在其他插件中设置首选项,这可能是您可以解决您遇到的问题的一种方式。