Java的:控制台应用程序主线程产生一个关键监听线程(java: console applicati

2019-09-19 15:00发布

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

我所做的那些步骤,提供一键循环中断是生成一个线程从System.in读取 - >此线程则中断步骤,如果按键。 这工作得很好,但循环条件应验的时候,那么这个按键侦听器线程将阻塞System.in,所以下一步,需要用户交互将受到影响

我的按键侦听器线程的run基本上是:

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

这当然块,所以我一直在寻找一种方式来解决这个问题

Answer 1:

当我改变的键侦听线程:

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 }

和步循环之后我就打断关键监听线程,因为不再需要它。

所以,这个工作对我很好,因为我没有发现这样的问题的解决方案,希望它张贴在这里为后人:)



文章来源: java: console application main thread spawns a key listener thread