java:console application主线程产生一个关键的监听器线程

时间:2012-07-17 11:32:19

标签: java key listener interrupt system.in

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

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

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

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

当然是哪些块,所以我一直在寻找解决这个问题的方法

1 个答案:

答案 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 }

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

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