10

当用户按下一个键时,我想跳出一个循环。

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

4

1 回答 1

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);
    }
  }
}

有效,但(在 Linux 上)仅在按下“返回”后,因为控制台输入流被缓冲并且由操作系统决定。这意味着您无法通过使用 Channels 或任何其他 NIO 类来克服这一点。为确保控制台刷新每个字符,您需要修改终端设置。我曾经写过一个 C 程序来做到这一点(修改当前终端的 termios 结构的 ICANON 标志),但我不知道如何从 Java 中做到这一点(但请参阅第二个链接)。

一般来说,您可以通过搜索“java nonblocking input”在此问题中找到更多内容。

于 2010-12-25T10:04:18.380 回答