Java で <tab> キーストロークをキャプチャする最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/4608854

  •  25-09-2019
  •  | 
  •  

質問

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

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

役に立ちましたか?

解決

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

編集: 動作することを確認できました

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

再度編集します: ライブラリには、コマンド ラインのオートコンプリート (タブを押すことによる) が含まれています...楽しむ :)

他のヒント

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

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

C アプリケーションでも同様のものがあります。シェルは生のキーストロークを必要とするため、入力モードをクックから生に設定します。Readline は、Linux でこのために使用される通常のライブラリです。Windows では何が一般的なのかわかりません。私が考える限り、ここでの選択肢は JNI を使用するものだけです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top