java - 如何取消从控制台读取输入?

标签 java multithreading timer console system.in

所以我正在尝试制作一个控制台应用程序,对用户施加时间限制。用户需要输入一定的数字,但经过一定的毫秒(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”,但程序不会终止。看来它仍在等待用户的输入。我做错了什么?或者有更好的方法吗?

最佳答案

Timer 不是守护线程,它不会自行终止,除非您调用timer.cancel() 或以这种方式创建计时器:

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

关于java - 如何取消从控制台读取输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9983500/

相关文章:

delphi定时器比定时器服务中断例程更快

java - 等待异步回调完成并传递值

java - Java中的通用数组创建

java - 在 GWT 中注入(inject) Javascript

javascript - 倒计时器激活 Controller 方法

javascript - 网络 worker sleep

java - XML DOM 创建子级采用 Node 而不是 Element

线程 Thread-1 中的 Python 异常(很可能在解释器关闭期间引发)?

java - 在Java中将线程更改为进程

wait()可以代替sleep()或delay()吗?