3

私はこれにしばらく取り組んでおり、過去 3 日間、Java でコンソールを効果的にクリアする方法を求めてインターネットを引き裂いています。

私が見た方法は「完了」しました

for(int x = 0; x!=100; x++){ System.out.println(); }上にスクロールして、印刷されたステートメントをもう一度見ることができるので、この方法 は最悪です。

Console.Clear();そしてそれのすべてのバリエーションは、私にとってはうまくいきませんでした。

Runtime.getRuntime().exec("cls");私がそれを使用しようとした場合でも機能しませんでした。

(私は JCreator を使用してコーディングしていますが、これが私の問題と関係があるかどうかはわかりません)

joesumbody122によるこの方法は、面白そうに見えました:

 private static void clearLine()
 {
       Console.Write(new string(' ', Console.BufferWidth - Console.CursorLeft));
 }

private static void clearLine(int left, int top)
{    

int pLeft = Console.CursorLeft;
int pTop  = Console.CursorTop;

Console.setCursorPosition(left, top);
Console.Write(new string(' ', Console.BufferWidth - Console.CursorLeft));

Console.setCursorPosition(pLeft, pTop);
}

しかし、悲しいことに、私はそれを私のために働かせることができませんでした. 彼がコンソールから呼び出したすべてのメソッドが存在しないというエラーが表示されました。java.io.*;彼のメソッドは明確に1行をクリアするので、誰かがこれを機能させることができれば、(繰り返しますが、私はJCreatorを使用してコードを書いていますが、これが私の問題と関係があるかどうかはわかりません)行。

嫌がらせを少なくする方法は?

これに戻るfor(int x = 0; x!=100; x++){ System.out.println(); }ユーザーがコマンドラインで上にスクロールできないようにする方法はありますか? カーソルをプロンプトの左上に設定するには? これにより、この方法がより便利になります。

別の理論

あるコマンドラインで印刷を停止し、別のコマンドラインで印刷を開始し、最初のウィンドウを閉じて、コンソールをクリアしたように見えるだけでなく、まったく新しいものを作成するように Java に指示する方法はありますか? 私はこれを過去 2 時間熟考しました。理論的には機能しますが、そのためのコードが存在するかどうかさえわかりません。

4

3 に答える 3

3

どこでも機能する信頼できる方法はありません。あなたはすでにこれをほとんど発見しています。

通常、コマンドライン出力は端末のスクロールバック バッファに送られ、最後のn行だけが表示されますが、前の行はスクロール メカニズムを介して利用できます。コマンドライン プログラムはこのバッファに直接書き込みませんstdoutが、ほとんどの場合、データを表示する端末プロセスにパイプされて書き込みます。

一部の端末プログラム (つまり、ANSI エスケープをサポートするプログラム) では、画面の表示部分をクリアできる場合があります。私の知る限り、Windows の cmd.exe だけが、スクロールバック バッファ全体をクリアすることによって「画面のクリア」要求に応答します。Linux AFAIK では、バッファを完全に破棄することはできません。また、Windows ではcls、実行可能なコマンドではなくシェルが組み込まれているため、Java から実行することはできませんSystem.exec()

また、任意のコマンドライン プログラムは、プログラムがそれを認識せずに出力をファイルにリダイレクトすることができます。この場合、「画面のクリア」はあまり意味がありません。

このレベルの制御が必要な場合は、Swing、AWT、GWT などを使用して独自の表示ウィンドウを作成し、そこですべての対話を管理する必要があります。

于 2013-10-11T23:16:38.687 に答える