問題タブ [jline]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JLineでKeyListenerに相当するものを書くには?
私は Java で書かれたコンソール アプリケーションに取り組んでいます。私がしなければならないことは、ユーザーのキーボード入力を処理することです。ターミナルでプログラムを使用して長いプロセスが起動された場合、ユーザーは'q'
いつでも を押してプロセス (別のスレッドで実行されている) を停止できる必要があります。
私はいくつかのことを試しました:
InterruptedException
ユーザー入力を読み取り、プロセスのスレッドにスローする別の別のスレッドで実行する- JLine とその使用
ConsoleReader
- JLine を使用
TriggeredAction
して、キーボード キーにリンクされたキーを追加します。
しかし、毎回同じ問題に直面します。ユーザーはENTER
キーを押す必要があり、それは望ましくありません。
何かアイデアがあれば、または私の問題の実際の解決策を教えていただきありがとうございます。
PS : これが不可能だと思う場合は、回答しないでください。私はそれが可能であることを知っています。
java - 1 行に複数語のコマンドを使用する JLine の例
1行に複数のコマンドを使用する例が見つからないようです。
たとえば、cisco ios に似た cli を書きたいとします。この場合、1 行に複数のレベルのコマンドを含めることができます。
例えば。最初の単語は「show」である可能性があり、「show」と入力してタブを押すと、次のオプションのセットが表示されます (cisco の例では「?」を使用してリストを表示します)。
readCharacter を使用して一度に 1 文字を読み取り、スペースが表示されたらそれまでの行を解析することを考えています。
Jline でこの種の要件を経験した人はいますか?
scala - Scala JLine の呼び出し間の履歴を保存およびロードする方法
CLI プログラムでScala JLineを使用しています。正常に動作していますが、プログラムを再起動するたびに履歴が忘れられます。というクラスがあり、そのクラスにはのインスタンスを取るというメソッドがあることがFileHistory
わかります。そのメソッドを呼び出すと、履歴を含むファイルが作成またはロードおよび保存されると予想されます。しかし、そうではありません。ConsoleReader
setHistory()
FileHistory
残念ながら、ドキュメントはほとんど存在しません。次回 JLine 対応プログラムを実行するときに、前回の実行で入力したコマンドを記憶するようにするにはどうすればよいですか?
アップデート
mirandes によって以下に与えられた正解。mirandes と som-snytt に感謝します。
java - java jlineで出力を印刷しながら入力を配置する
配置したものに影響を与えることなく、テキストも印刷されると同時に入力テキストを配置するにはどうすればよいですか?
常にデバッグ情報が出力されるサーバーを作成しようとしていますが、同時に、表示されている情報を見ながらコマンドを実行できるようにしたいのですが、既に入力されている情報に影響を与えずに実行します入力フィールドで。(Minecraft Bukkit は一例です)
java - パイプとJavaで入力をリダイレクトする
MSDNでリダイレクトされた入力と出力を使用して子プロセスを作成することを読みました。
そして、出力をリダイレクトしましたが、私の場合、リダイレクト入力はこの例とは異なります。
子プロセスで実行java -jar xxx.jar
しました。入力を stdinPipe にリダイレクトすることは成功しましたが、子プロセスである jar が入力を読み取らないことがわかりました。
次のように入力ハンドルをリダイレクトしました。
.Itを使用すると、出力と入力にbSuccess = WriteFile(g_hChildStd_IN_Wr, pCmd, strlen(pCmd), &dwWritten, NULL);
使用した小さなテスト jar ファイルで完璧に実行されます。System.out.println()
System.in.read()
しかし、jar サーバーを実行すると、入力が無効になり、リダイレクトが失敗します。私が知っている唯一のことは、jar の使用です。私ConsoleReader(System.in, System.out)
は Java に慣れていません。
どうもありがとう!!
PSソースコードは、最初に指定されたリンクと同じです。
最後に、これjline.console.ConsoleReader.readLine(">",null)
が問題であることがわかりました。引数を指定してJavaを実行する-nojline
と、すべて問題ありません!
jline.console.ConsoleReader のソース コードを読んでいませSystem.in.read()
んjline.console.ConsoleReader.readLine(">",null)
。
問題のコードは以下です。
したがって、使用jline.console.ConsoleReader.readline()
も とは異なりjline.console.ConsoleReader.readline(">",null)
ます。
研究を続けます。
readline() 関数は readline(null,null. 1)コードがコードにぶつかりましたif (!terminal.isSupported())
か?または、ソースコードを理解していませんか?Javaに慣れていないのはとても難しいです。
vb.net - ProcessStartInfo と JLine
Visual Basic で ProcessStartInfo を使用して、JLine ライブラリによって処理される Java アプリケーション I/O をリダイレクトしたいと考えています。出力は問題ありませんが、入力は機能しません。
Process.StandardInput.WriteLine Not working on Java.exeが見つかりました。OP はJLine を停止することで問題を解決します。
これは安全な解決策ですか? これを解決する他の方法を知っていますか?
java - jline ベースのコンソール アプリケーションをテストする方法
ユーザーとの対話を処理するためにjlineを使用するコンソール アプリケーションをテストしようとしています。
アプリケーションの以下にアクセスできるProcessBuilderを使用してアプリケーションを開始しています。
次のようなワークフローを使用することを期待していました。
- アプリケーションを開始
- アプリケーションのプロンプトが表示されるまで出力を読む
>
- テストケースの入力を送信します。
login
- 期待される応答が表示されるまで出力を読み取ります。
Username:
- 等々
ただし、テストはフリーズするだけです。コードをステップ実行すると、Windows で_getchへの JNI 呼び出しで jline がフリーズしているように見えます。問題は、ヘッドレスの ProcessBuilder から Java を実行しているため、コンソールがなく、ウィンドウが混乱しているためだと推測しています。Jlineのドキュメントに従って設定-Djline.terminal=jline.UnsupportedTerminal
しても役に立ちません。
(Java 以外の) readline アプリケーションをテストするためのPython pexpectについて議論しているスレッドを見つけました。
質問: Java ツールだけを使用して jline ベースのアプリケーションをテストするにはどうすればよいですか?
scala - 「IllegalArgumentException: 行 '"' に終了引用符がありません」という例外が発生するのはなぜですか
UNIXプロンプトから実行するとsbt
、コンソール内のすべてのコマンドの後に次のようになります。
誰かがヒントをくれて、何が悪いのか教えてくれませんか?