問題タブ [jline2]
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 - jline2 は、telnet コンソールで "\n" を出力すべきときに "^J" を出力します
JLine 2 (v2.13) を Socket IO と組み合わせて使用し、通常の telnet クライアント経由でアクセスできるアプリ用の管理コンソールを作成しています。ただし、改行を出力する必要があるときに奇妙な記号を出力することがわかりました。
正しい出力は次のようになります。
コードをたどると、問題の原因となった次のコード行が見つかりました。
もう 1 つの奇妙な点は、上向き矢印を押して履歴を取得すると、コンソールが出力され^[[A
、他に何も起こらないことです。
誰にもアイデアはありますか?
更新:関連するソースコードを追加
- 着信 telnet 接続を受け入れるコード:
ConsoleReader
を作成してコマンドをディスパッチするコード:
更新 2
すいません、いつの間にか消えてました。私のプロジェクトが私に新鮮な空気を吹き込んでくれるので、戻ってきてください。だからここに何が起こったのですか:私は作成し、問題PrintWriter
の回避策としてそれを使用しました:^J
jline2
ただし、 を telnet セッションと一緒に使用すると、他にも多くの問題があります。
- タイプ
<TAB>
は、完全なリストをアクティブにする代わりにタブを表示します。ただし、Enter キーを押すと、完全なリストとエラー メッセージが表示されます。 - 矢印
<UP>
を入力して を表示し^[[A
、Enter キーを押すと、最後のコマンドが実行されます。ただし、コマンドライン編集を失いました
問題はまだ残っており、ガイドが必要なだけで解決する方法があるはずだと思います...
java - 独自のプロンプトを備えた Java コマンドライン アプリ
私はJAVAコンソールアプリケーションを書いています。ユーザーが jar を起動すると、コマンドを入力できる Linux シェルのようなコマンドラインが表示されます。これは私が以前にプログラムしたことがないものです。通常、GUI を作成するか、解析されるいくつかの引数で jar を開始します。
基本的に私は2つの質問があります:
- コマンドラインからユーザー入力を読み取り、コマンドを解析してプロンプトを生成するのに役立つサードパーティライブラリはありますか? メイン クラスで渡された引数を解析するには、通常 Apache Commons CLI で使用します。ここもフルに使うか、もっといい方法はないか。
「無限の入力」を提供するためのベストプラクティスはありますか? 私が見つけたすべてのソリューションは、次のように 10 年以上前のものです。
これはまだベストプラクティスですか、それともより良い方法がありますか?
java - Jline2でJavaを使用してダブルタブキーの押下を識別することは可能ですか
Java 1.7 で Jline2 を使用して CLI インターフェイスを生成しています。コンソール リーダーでダブル タブ キーの押下をキャプチャする必要があります。可能であれば、同じ実装方法を教えてください。
java - Java で Jline 2.14 を使用すると、最初の文字が検出/印刷されない
上記のコードをコマンド プロンプトで実行すると、入力された最初の文字が検出されません。上記のロジックは、Jline2.14 コンソール リーダーでダブル タブ キーの押下を検出するために使用されます。
java - jLine を使用した Java コンソール アプリケーション
マルチスレッド Java コンソール アプリケーションがあります。スレッドの 1 つはユーザーからの入力を読み取り、他のスレッドはコンソールにデータを出力します。この問題は、ユーザーが入力を入力しているときにライター スレッドが何かを出力すると発生します。ユーザーの邪魔になります。
出力の先頭に「\r」を書き、見栄えを良くするために行をクリアしました。ただし、ユーザーがその瞬間まで入力したものを次の行に出力したい。
たとえば、入力として 123456 を入力します。しかし、123と入力すると、
ライタースレッドは「OUTPUT」を出力します。
以前に入力したもの ("123") を表示してから、残りの入力を入力します。
jLine を使用するように提案されました。しかし、私はそれを達成できませんでした。jLine ライブラリの使用例を提供したり、代替ソリューションを提案したりして、私を助けてくれませんか?
ライター スレッドをブロックしないことが重要です。到着時に出力を印刷する必要があります。