所以我正在尝试制作一个控制台应用程序,对用户施加时间限制。用户需要输入一定的数字,但经过一定的毫秒(10 秒)后,它将打破该输入模式并告诉用户时间已过并且程序继续。这是我的代码:
final InputStreamReader isr = new InputStreamReader(System.in);
final BufferedReader br = new BufferedReader(isr);
TimerTask task = new TimerTask() {
@Override
public void run() {
try {
System.in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
};
new Timer().schedule(task, 10000);
try {
String line = br.readLine();
if (line == null) {
System.out.println("TIME EXPIRED");
} else {
System.out.println("TEXT: " + line);
}
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("END");
它似乎工作正常,只是程序似乎无限期地停留在输入模式。它向控制台输出“END”,但程序不会终止。看来它仍在等待用户的输入。我做错了什么?或者有更好的方法吗?
最佳答案
Timer 不是守护线程,它不会自行终止,除非您调用timer.cancel() 或以这种方式创建计时器:
new Timer(true).schedule(task, 10000);
关于java - 如何取消从控制台读取输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9983500/