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

时间:2012-04-02 20:40:05

标签: java multithreading timer console system.in

所以我正在尝试制作一个对用户施加时间限制的控制台应用程序。用户应该输入一定的数字,但是在一定量的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”,但程序不会终止。它似乎仍然期待用户的输入。我做错了什么?或者有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

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

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