0

我写了一个工具,它正在执行一些步骤 1..n 一些步骤需要用户交互(从 System.in 中读取) 其他步骤循环直到满足某些条件或用户按下某个键(当用户按下键时循环应该结束,主要应​​该进入下一步)

我为那些提供键循环中断的步骤所做的是生成一个线程,该线程从 System.in 读取 -> 如果按下键,则此线程然后中断该步骤。这工作正常,但是当循环条件得到满足时,这个关键的侦听器线程将阻塞 System.in,因此需要用户交互的下一步将受到影响

我的关键监听线程的运行基本上是:

new InputStreamReader(System.in).read() > 0;

当然是哪些块,所以我正在寻找解决此问题的方法

4

1 回答 1

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 }

在 step 循环之后,我只是中断了关键侦听器线程,因为它不再需要了。

所以这对我来说很好,因为我没有找到解决这些问题的方法,所以想在这里为后代发布它:)

于 2012-07-17T11:32:19.163 回答