2012-10-23 174 views
0

我有一個小程序,在主線程中,我要求控制檯中的用戶輸入。我如何停止阻止讀BufferedReader.readline()?

System.out.print("Alternatively, enter peer's ID to connect:"); 
InputStreamReader reader = new InputStreamReader(System.in); 
BufferedReader bReader = new BufferedReader(reader); 
String peerID = bReader.readLine(); 

並在一個單獨的線程中,我從我的套接字的InputStream偵聽。如果我從這個流中收到一些東西,我會嘗試通過調用System.in.close()來「解鎖」readLine,而不用等待用戶的輸入。主線程然後可以繼續對從套接字讀取或從用戶獲得的信息執行一些操作。

不知何故,它似​​乎可以在我的Mac上運行,但如果我在Windows上嘗試它,單擊調試器,我發現System.in.close()塊,整個程序將掛起。

任何想法爲什麼以及如何解除readline()?否則,重寫邏輯的好方法是什麼?

+0

您是否有過使用這些解決方案的經驗? http://stackoverflow.com/a/6008607/365237 http://stackoverflow.com/a/7456207/365237 – eis

回答

1

您可以嘗試關閉bReader,但更健全的方法是在nio軟件包中使用可中斷的io,並可能使用Console。我會嘗試使用Console.read(CharBuffer),並中斷該線程。這個「應該」起作用。雖然沒有經過測試...

更新:但是Selector可能會更適合您的目的。聽你的套接字和System.in,並採取行動提供輸入?

+0

你不能選擇System.in。 – EJP