打印输出直到按下键

时间:2017-02-25 02:28:05

标签: java inputstream user-input keyboard-events

这似乎是一个简单的问题,但我似乎无法解决它。我需要打印输出(从变量)到控制台,直到用户按任意键。打印在while循环中完成:

int i;
while((i=input.read())!=-1){
  System.out.print((char)i);
}
input.close();

问题是输入流永远不会到达它的结尾,只等待更多的字符进入,从而阻止执行更多的代码。用户何时停止输出是很明显的,所以我很好地将这个责任交给用户。用户告诉应用程序停止的方式并不重要,只要它很快,(例如按空格键,输入或任何其他特定键都可以)。

提前致谢,
vikarjramun

1 个答案:

答案 0 :(得分:1)

我提出的第一个解决方案是线程控制台输入。该线程更新了一个可由打印代码访问的变量,因此您可以在每个打印语句之前检查它。

import java.util.Scanner;
import java.util.concurrent.atomic.AtomicBoolean;

public class RunUntilKeyPressed {
    static AtomicBoolean hasUserPressedKey = new AtomicBoolean(false);

    public static void main(String[] args) {

        Thread t = new Thread(() -> {
            Scanner scan = new Scanner(System.in);
            System.out.println(scan.next());
            hasUserPressedKey.set(true);
            scan.close();
        });
        t.start();

        while(!hasUserPressedKey.get()) {
           System.out.println(hasUserPressedKey);
        }
    }
}

此代码将一直运行,直到用户按下Any Key(空格除外)和Enter,就像输入scan.next()方法一样。