我已经使用Preference Pages从默认模板创建了Eclipse插件。有一些首选项参数,其中两个是String。我还在此插件中创建了自定义外部工具启动配置,并且我使用之前提到的一个字符串参数(让它为P_PATH
)默认情况下初始化工具的某个字段(使用SetDefaults
方法)。问题是它没有像我建议的那样工作。当我启动这个插件(在另一个Eclipse实例中)时,我转到Window->Preferences->Sample Preferences
我可以编辑和保存字段值。但是在我完成之后(当我输入与P_PATH
值相关的字段时)我创建了所选类型的新外部工具和所选字段的字符串参数(绑定到P_PATH
的那个,让它成为"文件路径")被Plugin中指定的值初始化,而不是我在Preference Pages表单中输入的值。因此,我希望我在首选项页面中输入的字符串值作为其参数之一传递给外部工具,当我创建所选类型的新外部工具时,它应该在那里(默认情况下)。我怎样才能做到这一点?我将一个外部工具字段和一个首选项页面字段绑定到相同的字符串参数,但看起来它毕竟没有正确传递给外部工具。
添加了一些代码,Preference Pages有三个类,第四个类用于Launch Configuration选项卡。这里只是相关的代码:
public class PreferenceConstants {
public static final String P_PATH = "pathPreference";
}
public class PreferenceInitializer extends AbstractPreferenceInitializer {org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer#initializeDefaultPreferences()
public void initializeDefaultPreferences() {
store.setDefault(PreferenceConstants.P_PATH,"Default value");
}
}
public class PreferencePage
extends FieldEditorPreferencePage
implements IWorkbenchPreferencePage {
public PreferencePage() {
super(GRID);
setPreferenceStore(Activator.getDefault().getPreferenceStore());
setDescription("A demonstration of a preference page implementation");
}
public void createFieldEditors() {
addField(new FileFieldEditor(PreferenceConstants.P_PATH,
"&Console compiler path:", getFieldEditorParent()));
}
public void init(IWorkbench workbench) {
}
}
public class LaunchConfigurationTabs extends AbstractLaunchConfigurationTabGroup {
@Override
public void setDefaults(ILaunchConfigurationWorkingCopy configuration){
configuration.setAttribute("org.eclipse.ui.externaltools.ATTR_LOCATION", PreferenceConstants.P_PATH);
}
}
答案 0 :(得分:2)
该行:
configuration.setAttribute("org.eclipse.ui.externaltools.ATTR_LOCATION", PreferenceConstants.P_PATH);
只需将属性值设置为“pathPreference” - 这样做不可以执行任何操作来查找首选项中的值。
您可以在此时查找偏好值:
IPreferenceStore prefStore = Activator.getDefault().getPreferenceStore();
String value = prefStore.getString(PreferenceConstants.P_PATH);
configuration.setAttribute("org.eclipse.ui.externaltools.ATTR_LOCATION", value);
我认为如果首选项发生变化,您可以做任何会使属性值自动更新的内容。