如何在Clojure中等待按键

时间:2010-12-18 18:30:52

标签: clojure kbhit

当用户按下某个键时,我想摆脱循环。

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

1 个答案:

答案 0 :(得分:2)

您正在寻找Java中(Linux?)控制台中按键的非阻塞处理。 earlier question提出了两个可能启用此功能的Java库。如果它不需要是可移植的,那么有一个解决方案here

基本上,

public class Foo {
  public static void main(String[] args) throws Exception {
    while(System.in.available() == 0) {
       System.out.println("foo");
       Thread.sleep(1000);
    }
  }
}

工作,但是(在Linux上)只有在按下'return'之后,因为控制台输入流被缓冲并且由OS决定。这意味着您无法通过使用频道或任何其他NIO类来克服这一点。要确保控制台刷新每个字符,您需要修改终端设置。我曾经编写了一个C程序来执行该操作(修改当前终端的termios结构的ICANON标志),但我不知道如何从Java中执行此操作(但请参阅the second link)。

一般情况下,您可以在searching中针对“java非阻塞输入”在此问题中找到更多内容。