gpt4 book ai didi

java - 如何中断 java.util.Scanner nextLine 调用

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:23:59 25 4
gpt4 key购买 nike

我使用的是多线程环境,其中一个线程通过重复调用 scanner.nextLine() 不断监听用户输入。为了结束应用程序,这个运行循环被另一个线程停止,但是监听线程不会停止,直到最后一个用户输入完成(由于 nextLine() 的阻塞性质)。

关闭流似乎不是一个选项,因为我正在读取 System.in,它返回一个不可关闭的 InputStream

有没有办法打断scanner的阻塞,让它返回?

谢谢

最佳答案

article描述了一种在阅读时避免阻塞的方法。它提供了代码片段,您可以按照我在评论中指出的那样进行修改。

import java.io.*;
import java.util.concurrent.Callable;

public class ConsoleInputReadTask implements Callable<String> {
public String call() throws IOException {
BufferedReader br = new BufferedReader(
new InputStreamReader(System.in));
System.out.println("ConsoleInputReadTask run() called.");
String input;
do {
System.out.println("Please type something: ");
try {
// wait until we have data to complete a readLine()
while (!br.ready() /* ADD SHUTDOWN CHECK HERE */) {
Thread.sleep(200);
}
input = br.readLine();
} catch (InterruptedException e) {
System.out.println("ConsoleInputReadTask() cancelled");
return null;
}
} while ("".equals(input));
System.out.println("Thank You for providing input!");
return input;
}
}

您可以直接使用此代码,也可以编写一个新的可关闭 InputStream 类,包装本文中描述的逻辑。

关于java - 如何中断 java.util.Scanner nextLine 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4983065/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com