PlatformUI.getPreferenceStore() 什么都不存储

PlatformUI.getPreferenceStore() store nothing

我在使用 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;
}

使用调试器和 veryfing .metadata prefs 文件进行的验证表明 Eclipse 未考虑这些修改。

这是一种不好的做法吗?我正在编辑一个旧的 3.4 Eclipse 插件,它是这样做的,但我找不到导致我使用首选项失败的区别。

感谢您的阅读,也许还有您的回答, 沃尔多

是的,这是不好的做法。此首选项商店仅适用于 workbench。

您应该使用特定于您的插件的 IPreferenceStore。如果您的激活器扩展了 AbstractUIPlugin,您可以调用 AbstractUIPlugin.getPreferenceStore 方法。

要在您的首选项商店中初始化默认值,您应该使用 org.eclipse.core.runtime.preferences 扩展点来定义一个 initializer class 来设置默认值。

注意:needsSaving 方法只是 returns true 或 false 来告诉您偏好存储是否已更改 - 它不会设置该标志或进行保存。

另请注意,默认值不会写入首选项文件。