簡體   English   中英

如何停止阻止對BufferedReader.readline()的讀取?

[英]How do i stop blocking read on 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()嗎? 否則,重寫邏輯的好方法是什么?

您可以嘗試關閉bReader ,但是更bReader方法是在nio包中以及可能在Console使用可中斷io。 我會嘗試使用Console.read(CharBuffer) ,並中斷線程。 那“應該”工作。 還沒測試...

更新:但是選擇器可能會更適合您的目的。 聽一下您的套接字和System.in,然后對提供輸入的那一項進行操作?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM