9

コンソールモードで文字入力を解析するためにJLineをいじり始めたところです。それはうまくいくようですが、私は疑問に思っています:

文字が利用可能かどうかを調べるための JLine のノンブロッキングな方法はありますか? (つまりkbhit()、Windows のように。)

キーボード入力を独自のスレッドにラップして、スレッドセーフなキューでキーボード文字をメインスレッドに提供することはいつでもできると思いますが、それは不要なようです。

EDIT : これは文字単位の解析です。GUI を使用するつもりはありません。コンソール モードでの Java の通常の InputStream I/O では、最初に Enter キーを押す必要があります (たとえば、バッファリングされた入力のみ)。コンソール モードでの文字単位の入力は、Java では不可能です。そうではありません。JLine は、プラットフォームに依存する実装を備えた移植可能なインターフェースを使用してそれを行います。

編集の更新: ヘルパー クラスをハックして、ワーカー スレッドでブロッキング I/O を実行することができました (文字ごとの I/O には JLine を使用します。警告: Ctrl-C を自分で解析する必要があります!)。 isempty() ルーチンを使用した同期キュー経由。私が今していることはそれで結構ですが、将来的にこれを行う良い方法を本当に知りたいです.

4

2 に答える 2

4

あなたは正しい軌道に乗っているようです。

これを行う「正しい」方法は、すべてのブロッキング I/O を非ブロッキング キューに注ぐワーカー スレッドだと思います。java.util.concurrentのConcurrentLinkedQueueを見てください。

于 2009-01-09T20:25:13.423 に答える
3

ネイティブ ライブラリがなければ、コンソールを使用してノンブロッキング入力を取得することはできません。

Swing アプリを作成し、 KeyListenerを作成する必要があります。

このチュートリアルを読む: http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html

于 2009-01-05T19:48:36.063 に答える