当用户按下一个键时,我想跳出一个循环。
在 C 中我会使用 kbhit()。是否有 Clojure(或 Java)等价物?
您正在寻找 Java 中(Linux?)控制台中按键的非阻塞处理。较早的一个问题提出了两个可能启用此功能的 Java 库。如果它不需要便携,这里有一个解决方案。
基本上,
public class Foo {
public static void main(String[] args) throws Exception {
while(System.in.available() == 0) {
System.out.println("foo");
Thread.sleep(1000);
}
}
}
有效,但(在 Linux 上)仅在按下“返回”后,因为控制台输入流被缓冲并且由操作系统决定。这意味着您无法通过使用 Channels 或任何其他 NIO 类来克服这一点。为确保控制台刷新每个字符,您需要修改终端设置。我曾经写过一个 C 程序来做到这一点(修改当前终端的 termios 结构的 ICANON 标志),但我不知道如何从 Java 中做到这一点(但请参阅第二个链接)。
一般来说,您可以通过搜索“java nonblocking input”在此问题中找到更多内容。