我无法使用PlatformUI
存储我的偏好设置。我想创建一个PreferencesService来访问和编辑我的插件中的首选项。我正在从我的Activator
我的服务的初始化函数中调用,但这没有任何影响。这是我的功能:
public static void initPreferences() throws NullContributionException, CoreException {
final IPreferenceStore store = PlatformUI.getPreferenceStore();
for (String languageId : LanguageService.getLanguagesIds()) {
store.setDefault(languageId, true);
for (CheckerContainer checker : CheckerService.getCheckers(languageId)) {
String checkerPreferenceId = getPreferencesId(languageId, checker.getId());
store.setDefault(checkerPreferenceId, true);
store.setDefault(checkerPreferenceId + PREF_SEVERITY_ATTRIBUTE, "Error");
}
}
store.needsSaving();
}
我是以这种方式从我的激活器中调用它:
@Override
public void start(final BundleContext bundleContext) throws Exception {
// Initialize all preferences
UserPreferencesService.initPreferences();
Activator.context = bundleContext;
}
使用调试器和非常.metadata
个prefs文件进行的验证都表明Eclipse不会考虑这些修改。
这是一种不好的做法吗?我正在编辑一个旧的3.4 Eclipse插件,它正是这样做的,但我找不到因使用首选项而导致的差异。
感谢您的阅读,也许是您的答案, 沃尔多
答案 0 :(得分:2)
是的,这是不好的做法。此首选项存储仅适用于工作台。
您应该使用特定于您的插件的IPreferenceStore
。如果您的激活器延伸AbstractUIPlugin
,您可以调用AbstractUIPlugin.getPreferenceStore
方法。
要初始化首选项存储中的默认值,您应该使用org.eclipse.core.runtime.preferences
扩展点来定义一个initializer
类,您可以在其中设置默认值。
注意:needsSaving
方法只返回true或false以告诉您首选项存储是否已更改 - 它不会设置该标志或执行保存。
另请注意,默认值不会写入首选项文件。