ユーザーがキーを押したときにループから抜け出したい。
C では、kbhit() を使用します。Clojure (または Java) に相当するものはありますか?
Javaの(Linux?)コンソールでのキー押下のノンブロッキング処理を探しています。以前の質問では、これを可能にする可能性のある2つの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では)コンソールの入力ストリームがバッファリングされ、OSによって決定されるため、「return」を押した後でのみ機能します。これは、Channelsやその他のNIOクラスを使用してそれを克服できないことを意味します。コンソールがすべての文字を確実にフラッシュするには、ターミナル設定を変更する必要があります。私はかつてそれを行うCプログラムを作成しました(現在のターミナルのtermios構造体のICANONフラグを変更します)が、Javaからそれを行う方法がわかりません(ただし、2番目のリンクを参照してください)。
一般に、 「java nonblocking input」を検索すると、この問題でさらにいくつかを見つけることができます。