Итак, я пытаюсь создать консольное приложение, которое налагает на пользователя ограничение по времени. Ожидается, что пользователь введет определенное число, но через определенное количество мил (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, вы не застряли там, где вы думаете. Вы можете увидеть, какие пользовательские потоки не являются демоном, что может быть проблемой. - person Gray   schedule 03.04.2012