2011-01-05 2 views
4

Javaコマンドラインアプリケーションでタブ>キーストロークのキャプチャに問題があります。 System.in.read()を使用すると、タブキーを押すときに何も表示されないようです。これにアプローチする最善の方法は何ですか?Javaでは、<tab>のキーストロークをキャプチャする最良の方法は何ですか?

いくつかの文脈を与えるために、私はユーザがコマンドを自動完成させるためにTabキーのmid-commandを押すことを許可しようとしています(あなたがbashシェルで行うように)。私はこれを達成するためのよりよいアプローチがあるならば(おそらくSystem.in.read()を使ってこれにアプローチするのは最良の角度ではないでしょうか?)

+1

「rawモード」で1文字を読む方法については、http://stackoverflow.com/questions/1066318/を参照してください。 PaulとMichaelが示したように、これはプラットフォームに依存した解決策を必要とするでしょう。 –

答えて

7

JLineをご覧ください。私はそれを自分で使っていません。 Windows DLL(JNIを使​​用)を使用し、バッファモードではなく文字/生モードにコンソールを切り替えるためのLinuxサポートがあります。私はあなたの責任において使用する前にこれを使用したことはありません。また、私はそれがあなたの問題に対処する場合は100%を確認していないが、シュートその価値:)

EDIT:ライブラリが行います私はそれが再び

ConsoleReader cr = new ConsoleReader(); 
while (cr.readVirtualKey() != 0x09){ 
    //loop till Tab is pressed 
} 

EDITに動作し確認することができますコマンドラインに自動補完(タブを押すこと)が含まれています。Enjoy:

+0

JLineがgithubに移行しました:https://github.com/jline – axxis

0

私はあなたのシェルがタブをキャプチャして、あなたのアプリケーションに到達できないと推測します。これについてあなたができることは何もないかもしれません...

0

ユーザーがenterを押したときにのみ、InputStreamからのデータが利用可能になります。私は、タブの後にEnterを押すと、タブが表示されることがわかります。

cのアプリケーションでは、シェルはrawキーストロークを必要とするため、入力モードをcookedからrawに設定します。 Readlineは、Linuxでこれに使用される通常のライブラリです。私はWindows上で何がよくあるのか分かりません。私が考える限りでは、JNIを使​​用するものがここでは唯一の選択肢です。

関連する問題