Так что я пытаюсь создать консольное приложение, которое налагает на пользователя ограничение по времени. Пользователь должен ввести определенный номер, но после определенного количества мили (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");
Это, кажется, работает нормально, за исключением того, что программа зависла в режиме ввода на неопределенный срок. Он выливает «КОНЕЦ» на консоль, но программа не заканчивается. Кажется, он все еще ожидает ввода от пользователя. Что я сделал не так? Или есть лучший способ сделать это?
Это было предложено и ответил: HTTP: // stackoverflow.com/questions/804951/is-it-possible-to-read-from-a-java-inputstream-with-a-timeout –
Вы пытались сбросить стеки потоков? 'kill -QUIT' или jconsole могут показать вам их. Как отмечает @evanwong, вы не застреваете там, где думаете. Вы можете видеть, какие потоки пользователей не являются демонами, которые могут быть проблемой. – Gray