1

我开发了一个 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 线程中执行此操作,但不幸的是我不知道如何正确使用它。

请给我一些想法!

4

1 回答 1

0

看看优秀的文章When Runtime.exec() won't from JavaWorld,看看它是否有帮助。特别是,这可能是你的罪魁祸首:

由于一些原生平台只为标准输入输出流提供有限的缓冲区大小,未能及时写入子进程的输入流或读取输出流可能会导致子进程阻塞,甚至死锁。

本文提供了解决此问题的各种方法,包括使用后台线程的StreamGobbler类的源代码。stderrstdout

令人惊讶的是这篇文章的表现如此之好。它最初是在 2000 年编写的,我发现几乎所有内容仍然是准确的。

于 2010-03-16T23:00:40.790 回答