我有一个小程序,在主线程中,我要求用户在控制台中输入。
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();
在一个单独的线程中,我从套接字的输入流中监听。如果我从此流中收到某些内容,我会尝试通过调用 System.in.close() 来“解锁”readLine,而无需等待用户的输入。然后主线程可以继续使用从套接字读取或从用户获取的信息执行某些操作。
不知怎的,它似乎在我的 Mac 上工作,但如果我在 Windows 上尝试它,单步调试器,我发现 System.in.close()
阻塞,整个程序将挂起。
知道为什么以及如何解锁 readline()
吗?否则重写逻辑的好方法是什么?
最佳答案
您可以尝试关闭 bReader
,但更合理的方法是使用 nio 包中的可中断 io,也可能使用 Console
。我会尝试使用 Console.read(CharBuffer) ,并中断线程。那“应该”有效。不过还没有测试过...
更新:但是 Selector也许会更适合你的目的。监听您的套接字和 System.in,然后对提供输入的那个进行操作?
关于java - 如何停止阻止 BufferedReader.readline() 上的读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13028530/