問題タブ [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 - 独自のプロンプトを備えた Java コマンドライン アプリ
私はJAVAコンソールアプリケーションを書いています。ユーザーが jar を起動すると、コマンドを入力できる Linux シェルのようなコマンドラインが表示されます。これは私が以前にプログラムしたことがないものです。通常、GUI を作成するか、解析されるいくつかの引数で jar を開始します。
基本的に私は2つの質問があります:
- コマンドラインからユーザー入力を読み取り、コマンドを解析してプロンプトを生成するのに役立つサードパーティライブラリはありますか? メイン クラスで渡された引数を解析するには、通常 Apache Commons CLI で使用します。ここもフルに使うか、もっといい方法はないか。
「無限の入力」を提供するためのベストプラクティスはありますか? 私が見つけたすべてのソリューションは、次のように 10 年以上前のものです。
これはまだベストプラクティスですか、それともより良い方法がありますか?
scala - Scala -jline ファイル コンプリータにより、ファイルが見つからない (Linux)
このコードには非常に奇妙なものがあります。
build.sbt を実行して入力すると、すべて問題なく処理されます。process_file が呼び出されます。ファイル コンプリータ行のコメントを外すと、同じファイルが存在しないと報告されます。調子はどう?
linux - nohup の使用による「Bad File Descriptor」例外
私のアプリケーションは、シェル実行可能ファイルとして Linux OS のターミナル経由で起動できます。通常どおり実行している間は問題ありませんが、「nohup」コマンドと一緒に実行すると、「nohup.out」ファイルに以下の例外が記録されます
現在、私の分析によると、私のアプリケーションはSpring Shellに基づいており、アプリケーションの実行中に最初にターミナル/コンソールを開こうとします/アクセスしようとします。しかし、nohup が使用されているため、標準入力が /dev/null からリダイレクトされるため、アプリケーションがターミナルとして /dev/null を開いてアクセスしようとするため、上記の例外が発生します。
私が正しい方向に進んでいるかどうかにかかわらず、誰かが私を指摘できますか? また、nohupコマンドの代替手段はありますか?
java - JLine 3 - プロンプトを常に一番下に置く
プロンプトが毎回ページの下部に表示されるようにします。
そのGIFがあります:プロンプトが正しく表示されない
コードは、読み取り行のコードです。
それはスレッドにあります。
もう 1 つのスレッドがあります。JLine 2 では、コードはプロンプトを一番下に保持します (しかし、バグがありました!)
完全なソース: プログラムの完全なソース
java - jLine を使用した Java コンソール アプリケーション
マルチスレッド Java コンソール アプリケーションがあります。スレッドの 1 つはユーザーからの入力を読み取り、他のスレッドはコンソールにデータを出力します。この問題は、ユーザーが入力を入力しているときにライター スレッドが何かを出力すると発生します。ユーザーの邪魔になります。
出力の先頭に「\r」を書き、見栄えを良くするために行をクリアしました。ただし、ユーザーがその瞬間まで入力したものを次の行に出力したい。
たとえば、入力として 123456 を入力します。しかし、123と入力すると、
ライタースレッドは「OUTPUT」を出力します。
以前に入力したもの ("123") を表示してから、残りの入力を入力します。
jLine を使用するように提案されました。しかし、私はそれを達成できませんでした。jLine ライブラリの使用例を提供したり、代替ソリューションを提案したりして、私を助けてくれませんか?
ライター スレッドをブロックしないことが重要です。到着時に出力を印刷する必要があります。
java - Java Mockito がシングルトン メソッドの doReturn でスタックする
コンソールからの入力を読み取るのに役立つシングルトン クラスがあります。
テストしたいコードは、次のように参照しています。
次に、私のテストクラス:
私のテストは、doReturn("1").when(ioHelper).cr.readLine();実際にそのcr.readline();部分を実行したかのように行から動かなくなります。private native int read0() throws IOException;私のスタックトレースは、FileInputStream で見つかったメソッドを指しています。コメントは、入力が利用できない場合にブロックすることを示唆しています。コンソールのメソッドを置き換えたいreadLine()ので、CLI が入力を要求したときに、テストでその入力を「偽造」できます。
編集: 2 つの興味深いスレッドのコール スタック:
この質問の拡張: ユーザーに複数の入力を求める方法がいくつかあります (例: 設定の更新)。最良のアプローチは、引数を取るメソッドに設定をリファクタリングし、この新しいメソッドのみをテストすることであると考えるのは正しいですか? メソッドがから読み取ろうとしているときに、一連の文字列をテストに渡して押すことができる解決策はありConsoleReaderますか? 使用することを考えRobotましたが、基になるロジックではなくテストによって読み取りが行われない場合、キーストロークを正しい順序で確実に渡すにはどうすればよいですか?