Как давать и принимать команды из сторонней программы командной строки, используя класс Process в java?

Я пытаюсь запустить программу командной строки и взаимодействовать с ней, т. Е. Отдавать команды, а также принимать команды в ответ, и команды, которые я даю, должны изменить предыдущее состояние программы. Я попытался и смог успешно выполнить его, но для интерактивной части ответа нет. Это мой код:

 protected void doWork() {
        SwingWorker<String, Void> worker = new SwingWorker<String, Void>() {
            @Override
            protected String doInBackground() throws Exception {
                ProcessBuilder builder = new ProcessBuilder("e:/program files/urjtag/jtag.exe");
                builder.redirectErrorStream(true);
                Process process = builder.start();
                ConsoleReader consoleReader = new ConsoleReader(process.getInputStream());
                consoleReader.start();
                InputStream is = process.getInputStream();
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                 String s = "";
                while((s=br.readLine())!=null){
                 System.out.println(s);
                }
                System.out.println(consoleReader.getResult()+" <<<<<<<<<<<<<");
                int waitFor = process.waitFor();
                consoleReader.join();
                switch (waitFor) {
                case 0:
                    return consoleReader.getResult();
                default:
                    throw new RuntimeException("Failed to execute " + builder.command() + " \nReturned message: "
                            + consoleReader.getResult());
                }
            }
            @Override
            protected void done() {
                try {
                    showCommandResult(get());
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (ExecutionException e) {
                    e.printStackTrace();
                    showCommandError(e);
                }
            }
        };
        worker.execute();
}

Я взял его из здесь.

Я взял идею использования BuffuredReader из здесь, но ответа от программы просто нет.

Также, когда я запускаю программу, ничего не появляется, хотя, когда я запускаю ее в папке, она показывает свое собственное приглашение.


person Sukhmeet Singh    schedule 17.06.2013    source источник
comment
Не удается увидеть ни одного Process.getOutputStream() и записать в него   -  person Jayan    schedule 17.06.2013
comment
@Джаян, сэр, да, его нет, потому что я сначала застрял в успешном получении InputStream. Если вы скажете, сэр, я могу добавить и это. Также я не знаю, как использовать getOutputStream, но это не причина, по которой я его не добавил.   -  person Sukhmeet Singh    schedule 17.06.2013
comment
BufferedReader будет читать целую строку, я сомневаюсь, что это сработает, если вам придется иметь дело с подсказками.   -  person fge    schedule 17.06.2013
comment
Кстати, откуда это ConsoleReader?   -  person fge    schedule 17.06.2013
comment
@fge человек говорит, что это сработало java">здесь, хотя надо еще учитывать тот факт, что это сторонняя программа, так что она может там не работать, но в этом и весь вопрос, что тогда будет работать? ConsoleReader пока можно игнорировать, сэр, хотя я скопировал его из здесь   -  person Sukhmeet Singh    schedule 17.06.2013
comment
В посте, на который вы ссылаетесь, в конце ввода есть новая строка;) Вот почему он работает с читателем.   -  person fge    schedule 17.06.2013
comment
@fge это тоже не работает в моем случае, хотя спасибо за уведомление, я такой придурок, когда наблюдаю за вещами, которые хорошо видны;)   -  person Sukhmeet Singh    schedule 17.06.2013
comment
@ Sukhmeet Singh: Какова функциональность jtag.exe? Похоже, он выдает приглашение (urjtag.svn.sourceforge.net/viewvc/urjtag/tags/URJTAG_0_10/web/), и вам нужно написать туда, чтобы получить некоторый результат. Как заметил fge, вы не сможете использовать BufferedReader. Попробуйте использовать read в этом случае.   -  person Jayan    schedule 18.06.2013
comment
@Джаян, сэр, это правильно, и это то, что я упомянул в вопросе выше. Под чтением вы имеете в виду, что я должен использовать new BufferedReader(isr).read() ?   -  person Sukhmeet Singh    schedule 18.06.2013