JAVA:如何从首选项页面访问文件路径并在编程代码中使用它

我的ProcessBuilder类—

public class HelloWorldAction implements IWorkbenchWindowActionDelegate { IWorkbenchWindow activeWindow = null; public void run(IAction proxyAction) { MessageConsole myConsole = null; String name = "outputConsole"; ConsolePlugin plugin = ConsolePlugin.getDefault(); IConsoleManager conMan = plugin.getConsoleManager(); IConsole[] existing = conMan.getConsoles(); for (int i = 0; i < existing.length; i++) if (name.equals(existing[i].getName())) myConsole = (MessageConsole) existing[i]; //no console found, so create a new one if (myConsole == null) myConsole = new MessageConsole(name, null); conMan.addConsoles(new IConsole[]{myConsole}); IWorkbench wb = PlatformUI.getWorkbench(); IWorkbenchWindow win = wb.getActiveWorkbenchWindow(); IWorkbenchPage page = win.getActivePage(); String id = IConsoleConstants.ID_CONSOLE_VIEW; try { IConsoleView view = (IConsoleView) page.showView(id); view.display(myConsole); } catch (Exception e) { } MessageConsoleStream out = myConsole.newMessageStream(); out.println("Prism Button Works !"); 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("Printing on console"); } else out.println("Process failed"); } catch (Exception e) { out.println(e.toString()); e.printStackTrace(); } } // IActionDelegate method public void selectionChanged(IAction proxyAction, ISelection selection) { // do nothing, action is not dependent on the selection } // IWorkbenchWindowActionDelegate method public void init(IWorkbenchWindow window) { activeWindow = window; } // IWorkbenchWindowActionDelegate method public void dispose() { // nothing to do } 

}

我的FileFieldEditorClass

  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); } public void init(IWorkbench workbench) { } 

}

FileFieldEditor类位于com.myplugin.rmp.preferences包中,而ProcessBuilder类位于com.myplugin.rmp包中,

现在建议我访问的方式。

在构建ProcessBuilder的try-block中尝试这个:

  IPreferenceStore store = plugin.getPreferenceStore(); ProcessBuilder pb=new ProcessBuilder(store.getString(PreferenceConstants.P_PATH); pb.directory(new File(store.getString(PreferenceConstants.P_PATH1)); Process p=pb.start(); 

f1.getStringValue()根据Javadoc返回字段编辑器的值。

要使流程构建器访问f1字段,您必须能够在创建流程构建器的类中访问f和f1。 为此,您可以在此类构造函数中添加这些字段

 public class CreateProcessBuilderClass { private final FileFieldEditor f; private final FileFieldEditor FileFieldEditor f1; // in the method creating the process builder ProcessBuilder pb=new ProcessBuilder(f.getStringValue()); pb.directory(new File(f1.getStringValue()); }