我想使用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之后调用的方法?
答案 0 :(得分:1)
现场编辑不支持ISecurePreferences
。他们将尝试加载并保存普通首选项存储中的首选项值,这可能会导致错误(特别是如果您没有设置错误)。
因此,使用字段编辑器并不能获得任何好处。使用普通的首选项页面而不是字段编辑器首选项页面并使用Text
,Button
等常规控件可能更简单。