Как отменить чтение ввода с консоли? - PullRequest
1 голос
/ 03 апреля 2012

Поэтому я пытаюсь создать консольное приложение, которое накладывает ограничения на пользователя. Ожидается, что пользователь введет определенное число, но после определенного количества миллис (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» на консоль, но программа не завершается. Кажется, он все еще ожидает ввода от пользователя. Что я сделал не так? Или есть лучший способ сделать это?

1 Ответ

1 голос
/ 03 апреля 2012

Таймер не является потоком демона, он не завершит себя, если вы не вызовете timer.cancel () или не создадите таймер следующим образом:

new Timer(true).schedule(task, 10000);
...