2010-07-23 147 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