質問
コンソールモードで文字入力を解析するために、 JLine をいじり始めました。それはうまくいくようですが、私は疑問に思っています:
文字が使用可能かどうかを調べるために、JLineにノンブロッキングの方法はありますか? (つまり、 kbhit()
Windowsの場合。)
キーボード入力を独自のスレッドで常にラップして、スレッドセーフキュー内のキーボード文字をメインスレッドに提供できると思いますが、それは不要なようです。
編集:これは文字ごとの解析です。 GUIを使用するつもりはありません。コンソールモードのJavaでの通常のInputStream I / Oでは、最初にEnterキーを押す必要があります(たとえば、バッファリングされた入力のみ)。 Javaではコンソールモードでの文字ごとの入力は不可能だと教えてはいけません。そうではありません。 JLineは、プラットフォーム依存の実装を備えたポータブルインターフェイスを使用してそれを行います。
更新の編集:ヘルパークラスをハッキングして、ワーカースレッドでブロッキングI / Oを実行できました(文字ごとのI / OにJLineを使用、警告: Ctrl-Cを自分で解析してください!)&次に、同期キューを介してisempty()ルーチンと通信します。今私がやっていることはそれでいいのですが、将来これを行う良い方法を知りたいです。
解決
あなたは正しい道を進んでいるようです。
「正しい」と思うこれを行う方法は、すべてのブロッキングI / Oを非ブロッキングキューに注ぐワーカースレッドです。 Havaの ConcurrentLinkedQueue java.utilから。コンカレント。
他のヒント
コンソールを使用して、ネイティブライブラリなしで非ブロッキング入力を取得することはできません。
Swingアプリを作成し、 KeyListener
このチュートリアルを読む: http://java.sun.com/docs/books/ tutorial / uiswing / events / keylistener.html