如何在Clojure中等待按键

jus*_*nhj 10 clojure kbhit

当用户按下一个键时,我想摆脱循环.

在C中我会使用kbhit().是否有Clojure(或Java)等价物?

Con*_*ion 2

您正在寻找 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);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

可以工作,但(在 Linux 上)只有在按“return”后才能工作,因为控制台输入流是缓冲的,这是由操作系统决定的。这意味着您无法通过使用 Channels 或任何其他 NIO 类来克服这个问题。为了确保控制台刷新每个字符,您需要修改终端设置。我曾经编写过一个 C 程序来执行此操作(修改当前终端的 termios 结构的 ICANON 标志),但我不知道如何从 Java 执行此操作(但请参阅第二个链接)。

一般来说,您可以通过搜索“java nonblocking input”找到更多关于本期的内容。