2010-12-18 7 views
10

ユーザーがキーを押したときにループから脱出したいと思います。Clojureでキーを押すのを待つ方法

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

+1

どのようなアプリケーションを使用しますか?コンソール、スイング、サーブレット? – ffriend

+0

スワンクなどを使用しているコンソールREPLからです。 – justinhj

+1

新しいスレッド( 'agent'、' future'、 'Thread'など)を起動します。これは実際の処理を行い、スレッド変数を' main'から保存します。入力を読み込み、空でなければ専用スレッドを停止します。あなたがREPLでプレーしているだけの場合、[this](http://www.objectcommando.com/blog/2010/06/10/clojure-futures/)はあなたのニーズを完全にカバーします。 – ffriend

答えて

2

Javaの(Linux?)コンソールでキープレスのノンブロッキング処理を探しています。 earlier questionは、これを可能にする2つの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); 
    } 
    } 
} 

作品が、コンソール入力ストリームがバッファリングされており、それはOSによって決定されるため、唯一の「リターン」を押した後(Linuxの場合)。つまり、チャンネルやその他のNIOクラスを使用することでそれを克服することはできません。コンソールがそれぞれの文字をすべてフラッシュするようにするには、端末の設定を変更する必要があります。私はかつて(現在の端末のtermios構造体のICANONフラグを修正する)Cプログラムを書いていましたが、Javaからどうやってやるのかはわかりませんが(the second link参照)

一般的に、この問題では、「java nonblocking input」についてはsearchingでさらに見つけることができます。

関連する問題