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

时间:2015-08-11 09:58:04

标签: java eclipse eclipse-plugin

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

我找不到performOk,performApply,performDefaults,performCancel和performHelp以外的方法,这些方法在UI线程中运行,以便使用存储的值更新字段。

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

CODE:

@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之后调用的方法?

1 个答案:

答案 0 :(得分:1)

现场编辑不支持ISecurePreferences。他们将尝试加载并保存普通首选项存储中的首选项值,这可能会导致错误(特别是如果您没有设置错误)。

因此,使用字段编辑器并不能获得任何好处。使用普通的首选项页面而不是字段编辑器首选项页面并使用TextButton等常规控件可能更简单。