所以我正在尝试制作一个对用户施加时间限制的控制台应用程序。用户应该输入一定的数字,但是在一定量的milis(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”,但程序不会终止。它似乎仍然期待用户的输入。我做错了什么?或者有更好的方法吗?
答案 0 :(得分:1)
Timer不是守护程序线程,除非你调用timer.cancel()或以这种方式创建计时器,否则它不会自行终止:
new Timer(true).schedule(task, 10000);