【问题标题】:Eclipse Preference PagesEclipse 首选项页面
【发布时间】:2014-12-11 17:25:14
【问题描述】:

我在eclipse中创建了一个偏好页面,偏好页面有两个字段

  1. 服务器网址
  2. 店铺位置

如果用户打开此首选项对话框,更改 url 的值并应用它,产品将重新启动,重新启动后,当我检查 url 字段中的值时,它会按预期更改。当我更改 url 和 directory 的值时,只有其中一个会更新,这取决于稍后更改哪一个。 这是我初始化首选项的 init 方法

public class DataStorePreferencePage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage {

public static final String SERVER_URL = "prefs_server_url";
public static final String WORKSPACE_DIR = "prefs_workspace_dir";
public static final String KEEP_LOCKS = "prefs_keep_locks";
//public static final String RELEASE = "prefs_release";
public DataStorePreferencePage() {
    super(GRID);
}


@Override
public void init(IWorkbench workbench) {
    setPreferenceStore(Activator.getDefault().getPreferenceStore());
    getPreferenceStore().addPropertyChangeListener(new IPropertyChangeListener() {
        @Override
        public void propertyChange(PropertyChangeEvent event) {
            String property = event.getProperty();
            System.setProperty("datastoreserver_url", property);
            if (property.equals(DataStorePreferencePage.WORKSPACE_DIR) ||
                    property.equals(DataStorePreferencePage.SERVER_URL)) {

                if(MessageDialog.openConfirm(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Information", "New settings will be applied after a restart.\nRestart now?"))
                    PlatformUI.getWorkbench().restart();

            }
        }
    });                     
}

@Override
protected void createFieldEditors() {
    StringFieldEditor urlEditor = new StringFieldEditor(SERVER_URL, "DataStore Server URL", getFieldEditorParent());
    StringFieldEditor workspaceDirEditor = new DirectoryFieldEditor(WORKSPACE_DIR, "Workspace directory:", getFieldEditorParent());
    BooleanFieldEditor keepLocksEditor = new BooleanFieldEditor(KEEP_LOCKS, "Keep locks (default setting):", getFieldEditorParent());
    //BooleanFieldEditor releaseEditor = new BooleanFieldEditor(RELEASE, "Release (default setting):", getFieldEditorParent());

    addField(workspaceDirEditor);
    addField(urlEditor);
    addField(keepLocksEditor);
    //addField(releaseEditor);
}

@Override
public boolean performOk() {

    return super.performOk();

}


}

问题:

新值存储在哪里? eclipse 从哪里获得任何 .ini 文件中的更改值?

如何同时更改这两个属性?

谢谢

【问题讨论】:

  • 您需要等到performOKperformApply 被调用后再尝试重新启动。
  • 当我执行 performOk 或 performApply 这些新值存储在哪里?
  • 我无法确定,因为您没有向我们展示足够的代码
  • 重启是出于测试目的还是您的应用程序的一部分?如果是应用程序的一部分,为什么?
  • 我刚刚删除了重启它不需要更改即使没有重启也能生效

标签: java eclipse-rcp preferences rcp


【解决方案1】:

等到performOkperformApply 被调用后再检查是否重启。

首选项值存储在首选项存储中。您可以通过以下方式获得它们:

IPreferenceStore store = getPreferenceStore();

String dir = store.getString(WORKSPACE_DIR);

String url = store.getString(SERVER_URL);

【讨论】:

  • 此首选项是否存储任何 ini 文件或其刚刚在内存中创建的文件或什么?
  • 如何确保在检查重启之前调用 performOk?在检查重启之前我需要调用 performOk 吗?
  • 如果用户单击“确定”,Eclipse 将调用 performOk(如果单击“应用”,则调用“performApply”)。如果他们单击取消,则新值将被丢弃,您不应重新启动。
  • 当我同时更改 url 和 dir 的值时,performOk() 会为每个字段调用两次。在每次 performOk() 调用之后调用 propertyChange 侦听器。如何确保为所有更改的值调用 performOk()?
  • Eclipse 应该只在单击 OK 按钮时调用 performOk 一次,我从未见过它以其他方式表现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-11
  • 1970-01-01
  • 1970-01-01
  • 2011-04-30
  • 1970-01-01
  • 2017-07-11
相关资源
最近更新 更多