4

Javaコマンドラインアプリケーションで<tab>キーストロークをキャプチャするのに問題があります。System.in.read()を使用するTabキーを押しても何も得られないようです。これに取り組むための最良の方法は何ですか?

コンテキストを示すために、ユーザーがコマンドの途中でタブキーを押してコマンドをオートコンプリートできるようにしようとしています(bashシェルで行うのと同じように)。これを達成するためのより良いアプローチがあるかどうか、私は提案を受け入れています(おそらく、System.in.read()を使用することは、これにアプローチするための最良の角度ではありませんか?)。

4

3 に答える 3

7

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

編集:私はそれが機能することを確認できます

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

もう一度編集:ライブラリには、コマンドラインのオートコンプリート(タブを押す)が含まれています...お楽しみください:)

于 2011-01-05T20:52:55.703 に答える
0

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

于 2011-01-05T20:34:35.837 に答える
0

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

cアプリケーションには、似たようなものがあります。シェルは、rawキーストロークを必要とするため、入力モードを調理済みからrawに設定します。Readlineは、Linuxでこれに使用される通常のライブラリです。Windowsで何が一般的かわかりません。私が考える限り、ここではJNIを使​​用するものが唯一のオプションです。

于 2011-01-05T20:37:52.730 に答える