我尝试使用以下代码在java控制台应用程序中设置用户输入超时
YourIndices
10秒后,当用户没有输入任何内容时,会显示超时消息。但是,每当用户尝试输入内容时,程序就会卡住并且不会返回输入
答案 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
并没有真正杀死输入线程,应用程序一直在等待输入运行,只有在收到一些输入并终止后才退出线程正常。但这不在你的问题范围内。