10

ユーザーがキーを押したときにループから抜け出したい。

C では、kbhit() を使用します。Clojure (または Java) に相当するものはありますか?

4

1 に答える 1

2

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」を検索すると、この問題でさらにいくつかを見つけることができます。

于 2010-12-25T10:04:18.380 に答える