3

私は Java で書かれたコンソール アプリケーションに取り組んでいます。私がしなければならないことは、ユーザーのキーボード入力を処理することです。ターミナルでプログラムを使用して長いプロセスが起動された場合、ユーザーは'q'いつでも を押してプロセス (別のスレッドで実行されている) を停止できる必要があります。

私はいくつかのことを試しました:

  • InterruptedExceptionユーザー入力を読み取り、プロセスのスレッドにスローする別の別のスレッドで実行する
  • JLine とその使用ConsoleReader
  • JLine を使用TriggeredActionして、キーボード キーにリンクされたキーを追加します。

しかし、毎回同じ問題に直面します。ユーザーはENTERキーを押す必要があり、それは望ましくありません。

何かアイデアがあれば、または私の問題の実際の解決策を教えていただきありがとうございます。

PS : これが不可能だと思う場合は、回答しないでください。私はそれが可能であることを知っています。

4

2 に答える 2

1

おそらく、これらのライブラリのいずれかを使用できます。

http://sourceforge.net/projects/jxgrabkey/ Linux の場合

Windows の場合はhttps://code.google.com/p/jintellitype/

あなたの質問とはあまり関係ありませんが、私はあなたを助けることができると思います.

http://sourceforge.net/projects/javacurses/

このすべての問題は、プラットフォームの独立性を失うことです。

于 2013-06-13T15:14:12.210 に答える
1

ユーザーがEnterキーを押さないようにし、キープレスに直接応答できるようにするために、次の方法でjline3を利用できます。最初に端末をrawモードに変更してキーに直接応答し、次に入力されるのを待ちますキャラクター。

var terminal = TerminalBuilder.terminal()
terminal.enterRawMode()
var reader = terminal.reader()

var c = reader.read()
<dependency>
    <groupId>org.jline</groupId>
    <artifactId>jline</artifactId>
    <version>3.12.3</version>
</dependency>
于 2020-01-05T17:58:43.090 に答える