无法重新打开
System.in,
System.out或
System.err。基础本机流是连接到其他进程或应用程序无法识别其身份的文件的文件描述符。关闭基础本机文件描述符后,将无法重新打开它们。
我最好的建议是为该对象创建一个包装器
InputStream类
System.in,并对该包装器进行编码以将其
close()视为无操作。或者,可以将包装器设置为“关闭”状态,而无需实际关闭包装的流。
在您的特定用例中,这是行不通的,因为您“需要”取消阻塞从中读取时被阻塞的线程
System.in。因此,在您的情况下,您将需要从中进行非阻塞输入
System.in。例如,使用该
available()方法来测试是否有任何字符要从控制台读取。(通常可以安全地假设,如果
available()返回的数字大于零,则可以读取整行。)
(它也可以使用来实现非阻塞读取
Selector,但我认为不可能为该
System.in对象获得“可选通道” 。)
请注意,这是
Thread.interrupt()行不通的。根据javadocs,它仅在您从可中断的通道中读取时才有效。
System.in不是可中断的通道,并且
如果是,则记录的行为
interrupt()
是该通道被中断关闭。



