【发布时间】:2012-04-02 20:40:05
【问题描述】:
所以我正在尝试制作一个对用户施加时间限制的控制台应用程序。用户应该输入一个特定的数字,但在一定数量的 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”,但程序不会终止。似乎它仍在期待用户的输入。我做错什么了?或者有更好的方法吗?
【问题讨论】:
-
您是否尝试过转储线程堆栈?
kill -QUIT或 jconsole 可能会向您展示它们。正如@evanwong 指出的那样,您并没有被困在您认为的位置。您可以查看哪些用户线程不是守护进程,这可能是问题所在。
标签: java multithreading timer console system.in