当用户按下某个键时,我想摆脱循环。
在C中我会使用kbhit()。是否有Clojure(或Java)等价物?
答案 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非阻塞输入”在此问题中找到更多内容。