如何从首选项页面获取文件的路径,并通过Workbench上的Button在控制台上打印输出?

我创建了一个首选项页面,其编程是:

public class SAML extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public SAML() { super(GRID); setPreferenceStore(RmpPlugin.getDefault().getPreferenceStore()); setDescription("Browse Appropriate files"); } public FileFieldEditor f; public FileFieldEditor f1; public void createFieldEditors() { f=new FileFieldEditor(PreferenceConstants.P_PATH, "&Prism.bat File:", getFieldEditorParent()); addField(f); f1=new FileFieldEditor(PreferenceConstants.P_PATH1, "&NuSMV Application File:", getFieldEditorParent()); addField(f1); } 

我想获取FileFieldEditor f路径,并希望此路径在嵌入工作台的按钮上运行(但该按钮的编程在同一工作区的不同项目中)。 具有“prism.bat”文件的硬编码路径的按钮编程是:

 try { //to clear the console on every click of button IViewPart view = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().findView(IConsoleConstants.ID_CONSOLE_VIEW); if (view != null) { (myConsole).clearConsole(); } ProcessBuilder pb=new ProcessBuilder("C:\\Program Files\\prism-4.0\\bin\\prism.bat"); pb.directory(new File("C:\\Program Files\\prism-4.0\\bin")); Process p=pb.start(); BufferedReader input = new BufferedReader(new InputStreamReader(p.getInputStream())); String in; while((in = input.readLine()) != null) { out.println(in); } int exitVal=p.waitFor(); if(exitVal==0) { out.println("Process Successful"); out.println("Printing on console with Exitvalue =0"); } else {out.println("Process failed"); out.println("Exitvalue = 1"); } } catch (Exception e) { out.println(e.toString()); e.printStackTrace(); } 

但我想从我的首选项页面FileFieldEditor f获取文件,并希望此路径嵌入按钮编程中,以便在按下按钮时显示结果。

你需要两个部分:

  • 初始化首选项默认值的代码
  • 使用当前值的代码

要设置默认值,请在Activator使用以下代码:

 public class Activator extends AbstractUIPlugin { @Override public void start(BundleContext context) throws Exception { super.start(context); IPreferenceStore ps = getPreferenceStore(); ps.setDefault(SHOW_IMAGE, true); } public static final String SHOW_IMAGE = "showImage"; } 

或者,您可以使用org.eclipse.core.runtime.preferences扩展点…

请注意,上面的代码假设首选项的类型是Boolean – 还有其他数字,字符串等方法……文件名是一个字符串。

要使用当前值,只需使用

 if (Activator.getDefault().getPreferenceStore().getBoolean(Activator.SHOW_IMAGE)) { … } 

以下幻灯片包含更多信息……