0

我有一个小程序,在主线程中,我在控制台中要求用户输入。

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 中监听。如果我从这个流中接收到一些东西,我会尝试通过调用来“解锁”readLine,System.in.close()而不用等待用户的输入。然后主线程可以继续对从套接字读取或从用户获得的信息进行处理。

不知何故,它似​​乎可以在我的 Mac 上运行,但是如果我在 Windows 上尝试它,单步调试调试器,我发现这些System.in.close()块和整个程序都会挂起。

知道为什么以及如何解除封锁readline()吗?否则重写逻辑的好方法是什么?

4

1 回答 1

1

您可以尝试关闭bReader,但更合理的方法是在 nio 包中使用可中断 io 并可能在Console. 我会尝试使用Console.read(CharBuffer)并中断线程。那“应该”起作用。虽然没有测试...

更新:但是选择器可能更适合您的目的。聆听您的套接字和 System.in,然后对提供输入的那个采取行动?

于 2012-10-23T10:45:34.753 回答