Java обрабатывает входные потоки в потоке - PullRequest
1 голос
/ 17 марта 2010

Я разрабатываю плагин Eclipse, и у меня проблема

Мой код следующий:

String run_pelda = "cmd.exe /C pelda.exe";
Runtime pelda_rt = Runtime.getRuntime();
Process pelda_proc = javacheckgen_rt.exec(run_pelda);

И после того, как я хотел бы прочитать входные данные:

InputStream toolstr = tool_proc.getInputStream();
InputStreamReader r = new InputStreamReader(toolstr);
BufferedReader in = new BufferedReader(r);

Но мой новый Eclipse instsnce зависает. Я думаю, что я должен делать это в Java-потоках, но, к сожалению, я не знаю, как правильно его использовать.

Пожалуйста, дайте мне несколько идей!

1 Ответ

0 голосов
/ 17 марта 2010

Посмотрите отличную статью Когда Runtime.exec () не будет из JavaWorld и посмотрите, поможет ли это. В частности, это, вероятно, ваш виновник:

Поскольку некоторые собственные платформы предоставляют ограниченный размер буфера только для стандартных потоков ввода и вывода, невозможность оперативной записи входного потока или чтения выходного потока подпроцесса может привести к блокировке подпроцесса и даже к тупиковой ситуации.

В статье представлены различные способы решения этой проблемы, в том числе исходный код класса StreamGobbler, который использует stderr и stdout в фоновых потоках.

Удивительно, насколько хорошо эта статья выдержала. Первоначально он был написан в 2000 году, и я считаю, что почти все это по-прежнему верно.

...