我写了一个工具,它正在执行一些步骤1..n 某些步骤需要用户交互(从System.in读取) 其他步骤循环直到满足某些条件或用户按下某个键 (当用户按下键时,循环应该结束,主要应该进入下一步)
我为这些提供密钥循环中断的步骤所做的是产生一个从System.in读取的线程 - >如果按下了键,该线程将中断该步骤。 这工作正常,但是当满足循环条件时,此关键侦听器线程将阻塞System.in,因此需要用户交互的下一步将受到影响
我的关键监听器线程的运行基本上是:
new InputStreamReader(System.in).read() > 0;
当然是哪些块,所以我一直在寻找解决这个问题的方法
答案 0 :(得分:0)
当我将密钥监听器线程更改为:
时try
{
InputStreamReader reader = new InputStreamReader(System.in);
while (!reader.ready()) { Thread.sleep(100); }
if (reader.read() > 0) { // interrupt this step and proceed to the next one }
}
catch (IOException e) { // do something }
catch (InterruptedException e) { // noone needs me anymore }
在步骤循环之后,我只是中断了键侦听器线程,因为它不再需要了。
所以这对我来说很好,因为我没有找到解决这些问题的方法,所以想在这里为后代发帖:)