设置用户输入超时

时间:2018-03-31 21:24:23

标签: java executorservice

我尝试使用以下代码在java控制台应用程序中设置用户输入超时

YourIndices

10秒后,当用户没有输入任何内容时,会显示超时消息。但是,每当用户尝试输入内容时,程序就会卡住并且不会返回输入

1 个答案:

答案 0 :(得分:0)

纠正次要编译问题并输出input的值,代码在成功输入时效果很好:

public class Foo {

    public static void main(String[] argv) {
        ExecutorService executor = Executors.newSingleThreadExecutor();
        Callable task =() ->  {
            System.out.print("input: ");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            return br.readLine();
        };
        Future future = executor.submit(task);
        try {
            String input = (String)future.get(10, TimeUnit.SECONDS);
            System.out.println(input);
        } catch (TimeoutException e) {
            future.cancel(true);
            System.out.println("Sorry you run out of time!");
        } catch (InterruptedException | ExecutionException e) {
            e.getMessage();
        } finally {
            executor.shutdownNow();
        }

    }
}

打印

  

输入:wfqwefwfqer

     

wfqwefwfqer

     

处理完成,退出代码为0

但是,你的代码有一个超时错误shutdownNow并没有真正杀死输入线程,应用程序一直在等待输入运行,只有在收到一些输入并终止后才退出线程正常。但这不在你的问题范围内。