晚上好,
使用 java 1.7,我尝试使用类似于下面的代码片段的代码覆盖 FieldEditorPreferencePage 的 performApply()
方法。 (额外的代码没有什么区别,只是这一个方法)
@Override
public void performApply() {
scopedPreferenceStore.setDefault(PREF_KEY, value);
super.performApply();
}
本质上,我想更新 PREF_KEY
的默认首选项值,因此当用户在应用更改后点击“恢复默认值”时,它会使用新值而不是旧值。
问题是,如果我这样做,当我重新运行程序时,不会存储新的默认值。如果我放弃使用 setDefault()
,则会存储新的默认值。
进一步澄清
使用setDefault
:
如果我将首选项 A 更改为 100,单击应用,将首选项 A 更改为 25,然后单击恢复默认值,我将看到 100。如果我重新启动程序并查看首选项 A,我会看到 50。
不使用设置默认值:
如果我将首选项 A 更改为 100,单击应用,然后单击恢复默认值,我将看到 50。但是如果我将其更改回 100,单击应用,然后重新启动我的程序并查看首选项 A,我会看到 100。
是什么导致了这种行为以及如何解决它?
注意:我正在使用首选项初始值设定项,但是我希望动态地将默认值更改为最后应用的用户输入,而不会出现上述奇怪的行为。
最佳答案
要设置首选项默认值,您应该使用 org.eclipse.core.runtime.preferences
扩展点的 initializer
元素来定义“首选项初始值设定项”类。不要尝试在字段编辑器或其他任何地方覆盖它。
<extension point="org.eclipse.core.runtime.preferences">
<initializer class="com.example.MyPreferenceInitializer"/>
</extension>
public class MyPreferenceInitializer extends AbstractPreferenceInitializer
{
@Override
public void initializeDefaultPreferences()
{
IPreferenceStore prefs = Activator.getDefault().getPreferenceStore();
prefs.setDefault(PREF_KEY, VALUE);
}
}
关于java - 通过 ScopedPreferenceStore 在 FieldEditorPreferencePage 中设置默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44835635/