JAVA: как получить доступ к пути к файлу со страницы настроек и использовать его в программном коде - PullRequest
2 голосов
/ 01 августа 2011

Мой класс 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,

Теперь предложите мне способ доступа.

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Попробуйте это внутри своего блока try, где вы создаете свой ProcessBuilder:

 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();
1 голос
/ 01 августа 2011

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());


}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...