如何使用 ISecurePreferences 初始化首选项页面字段?

How to initialize preference page fields using ISecurePreferences?

我想使用 ISecurePreferences 而不是普通的 IPreferenceStore,当我尝试使用存储值更新字段时出现问题。

除了 performOk、performApply、performDefaults、performCancel 和 performHelp 之外,我没有找到在 UI 线程中运行以使用存储值更新字段的方法。

目前我在创建字段后使用 asyncExec 执行此操作。

代码:

@Override
protected void createFieldEditors() {
    // TODO Auto-generated method stub      
    usernameField = new StringFieldEditor("username","Username:",getFieldEditorParent());
    addField(usernameField);
    //Create password field
    passwordField = new StringFieldEditor("password","Password:",getFieldEditorParent()){
        @Override
        protected void doFillIntoGrid(Composite parent, int numColumns) {
            super.doFillIntoGrid(parent, numColumns);
            getTextControl().setEchoChar('*');
        }
    };      
    addField(passwordField);    
    try{
    ISecurePreferences root = SecurePreferencesFactory.getDefault();
    final ISecurePreferences node = root.node("nodeName");

    System.out.println("Username initialized: "+node.get("username",""));
    System.out.println("Password initialized: "+node.get("password",""));


    Display.getCurrent().asyncExec(new Runnable(){

        @Override
        public void run() {
            // TODO Auto-generated method stub
            try {
                usernameField.setStringValue(node.get("username", ""));
                passwordField.setStringValue(node.get("password", ""));
            } catch (StorageException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }               
        }
    });                     
    }
    catch(StorageException ex)
    {
        System.out.println("Exception storage...");
        ex.printStackTrace();
    }
}   

我正在寻找正确的解决方案以更新创建的字段。是否有在 UI 线程中运行并在 createFieldEditors 之后调用的方法?

字段编辑器不支持 ISecurePreferences。他们会尝试在正常的首选项存储中加载和保存首选项值,这可能会导致错误(特别是如果您没有设置)。

因此,使用现场编辑器不会给您带来任何好处。使用普通的首选项页面而不是字段编辑器首选项页面并使用像 TextButton、....

这样的普通控件可能更简单