2010-07-23 97 views
3

我试图从两个不同的输入流(一个子应用程序的stdin和stderr)中读入并在一个组合框中打印它们。我从来没有这样做过,并且想知道最佳实践。Java无阻塞读取

我可以产生两个线程,并让它们都阻塞输入流。有没有更好的办法?

谢谢!

+0

你需要能够区分stdin和stderr的数据吗?如果没有,那么你可以使用['ProcessBuilder.redirectErrorStream'](http://download.oracle.com/docs/cd/E17409_01/javase/6/docs/api/java/lang/ProcessBuilder.html#redirectErrorStream%28boolean %29)将stderr重定向到stdin流。 – 2010-07-23 22:42:21

回答

-2

我认为你最好的策略是使用java.nio包中的类。检查this example了。

+0

不可能。他正在使用ProCess的流。你不能在这些上使用NIO。 – EJP 2010-07-24 10:13:36

1

您的方法很好,但如果您试图合并两个流,您可能会遇到输出/错误混杂在一起的问题。

也许检查出Apache commons-exec这是一个体面的库,用于处理进程调用和输出/错误捕获。在引擎盖下,它完全按照您的建议进行,分叉读取InputStream(s)的线程。具有两个线程的

-1

是唯一的解决方案。

+0

不,不是。往上看。 – EJP 2010-07-24 10:12:37