Как ждать нажатия клавиши в Clojure - PullRequest
10 голосов
/ 18 декабря 2010

Я хотел бы выйти из цикла, когда пользователь нажимает клавишу.

В C я бы использовал kbhit ().Есть ли эквивалент Clojure (или Java)?

1 Ответ

2 голосов
/ 25 декабря 2010

Вы ищете неблокирующую обработку нажатия клавиши на консоли (Linux?) В Java. предыдущий вопрос предложил две библиотеки 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) только после нажатия клавиши «return», поскольку входной поток консоли буферизуется и это определяется ОС.Это означает, что вы не можете преодолеть это с помощью каналов или любого другого класса NIO.Чтобы консоль сбрасывала каждый символ, вам нужно изменить настройки терминала.Однажды я написал программу на C, которая делает это (изменяет флаг ICANON структуры termios текущего терминала), но я не знаю, как это сделать с Java (но см. вторая ссылка ).

В общем, вы можете найти больше в этом выпуске, выполнив поиск для «неблокирующего ввода java».

...