PlatformUI.getPreferenceStore()不存储任何内容

时间:2017-06-27 16:20:41

标签: eclipse eclipse-plugin eclipse-rcp

我无法使用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插件,它正是这样做的,但我找不到因使用首选项而导致的差异。

感谢您的阅读,也许是您的答案, 沃尔多

1 个答案:

答案 0 :(得分:2)

是的,这是不好的做法。此首选项存储仅适用于工作台。

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

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

注意:needsSaving方法只返回true或false以告诉您首选项存储是否已更改 - 它不会设置该标志或执行保存。

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