打印输出直到按键被按下
Print output until key pressed
这似乎是一个简单的问题,但我似乎无法解决它。我需要将输出(从变量)打印到控制台,直到用户按下任意键。打印是在 while 循环中完成的:
int i;
while((i=input.read())!=-1){
System.out.print((char)i);
}
input.close();
问题是输入流永远不会到达终点,只会等待更多字符进入,从而阻止执行更多代码。什么时候停止输出对用户来说是很明显的,所以我可以把这个责任交给用户。用户如何告诉应用程序停止并不重要,只要它很快(例如,按 space、回车或任何其他特定键都可以)。
提前致谢,
维卡吉拉蒙
我想到的第一个解决方案是线程化控制台输入。该线程更新打印代码可访问的变量,因此您可以在每个打印语句之前检查它。
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);
}
}
}
此代码将 运行 直到用户按任意键(space 除外)并按 scan.next()
方法获得输入时的回车键。
这似乎是一个简单的问题,但我似乎无法解决它。我需要将输出(从变量)打印到控制台,直到用户按下任意键。打印是在 while 循环中完成的:
int i;
while((i=input.read())!=-1){
System.out.print((char)i);
}
input.close();
问题是输入流永远不会到达终点,只会等待更多字符进入,从而阻止执行更多代码。什么时候停止输出对用户来说是很明显的,所以我可以把这个责任交给用户。用户如何告诉应用程序停止并不重要,只要它很快(例如,按 space、回车或任何其他特定键都可以)。
提前致谢,
维卡吉拉蒙
我想到的第一个解决方案是线程化控制台输入。该线程更新打印代码可访问的变量,因此您可以在每个打印语句之前检查它。
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);
}
}
}
此代码将 运行 直到用户按任意键(space 除外)并按 scan.next()
方法获得输入时的回车键。