在我的 Eclipse RCP 中不会调用实现 AbstractPreferenceInitializer

Phi*_*ipp 3 eclipse-rcp preferences

我想使用 Eclipse 机制在我的 RCP 应用程序中设置默认首选项。因此,我扩展了课程AbstractPreferenceInitializer以设置我的默认首选项:

public class PreferenceInitializer extends AbstractPreferenceInitializer {
  @Override
  public void initializeDefaultPreferences() {
    IPreferenceStore preferenceStore = PlatformUI.getPreferenceStore();
    preferenceStore.setDefault("xyz",  xyz);
    preferenceStore.setDefault("abc", false);
  }
}
Run Code Online (Sandbox Code Playgroud)

然后我定义了扩展点:

<extension point="org.eclipse.core.runtime.preferences">
  <initializer class="com.abc.PreferenceInitializer">
  </initializer>
</extension>
Run Code Online (Sandbox Code Playgroud)

但不幸的是,初始化程序不会在启动期间WorkbenchPreferenceInitializer被调用(而 Eclipse将被调用)。

有人可以给我一个提示,该怎么做,才能运行?

str*_*cka 5

直到需要这些默认值(而不是在应用程序启动时,我猜这是您的期望)才会调用您的首选项初始值设定项代码。

如果您有自己的首选项页面,其中包含一些使用您的首选项名称的 FieldEditor,则当您转到“首选项”对话框并选择该首选项页面时,将调用您的首选项初始值设定项。

类似的东西:

public class MyPreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

    public void createFieldEditors() {
        Composite parent = getFieldEditorParent();
        addField(new StringFieldEditor(Constants.PREFERENCES.FILE_COMPARE_TOOL_LOCATION, "File compare tool location", parent));
        addField(new StringFieldEditor("xyz", "XYZ Value", parent));
        addField(new BooleanFieldEditor("abc", "Enable the ABC widget", parent));
    }

}
Run Code Online (Sandbox Code Playgroud)

当然,还有页面的扩展点:

<extension point="org.eclipse.ui.preferencePages">
  <page
        class="whatever.package.MyPreferencePage"
        id="whatever.package.MyPreferencePage"
        name="MyPrefs">
  </page>
</extension>
Run Code Online (Sandbox Code Playgroud)