我开发了一个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瞬间冻结了。我想我应该在java线程中这样做,但不幸的是我不知道要正确使用它。
请给我一些想法!
答案 0 :(得分:0)
查看来自JavaWorld的优秀文章When Runtime.exec() won't,看看它是否有帮助。特别是,这可能是你的罪魁祸首:
由于某些本机平台仅为标准输入和输出流提供有限的缓冲区大小,因此无法及时写入输入流或读取子进程的输出流可能导致子进程阻塞,甚至死锁。
本文提供了解决此问题的各种方法,包括在后台线程中使用StreamGobbler
和stderr
的{{1}}类的源代码。
令人惊讶的是,这篇文章有多么出色。它最初写于2000年,我发现其中所有内容仍然准确无误。