かなり長い間、私はこのために髪を引っ張ってきました。 Javaでコンソールをクリアする方法について1時間調査しました。
私が見つけたのは、大量の行を印刷するか、これを実行することによるダーティハッキングでした
_Runtime.getruntime.exec("cls/clear");
_
しかし、私には何も機能していないようです。 C(clrscr();
)のようにJavaのようにコンソールをクリアする方法は本当にありません。これを達成できる外部ライブラリはありません。
汚いハッキングの代わりに適切な関数、ライブラリなどを使用する前に誰かがこれを行ったことがあるかどうか教えてください。
端末が ANSIエスケープコード をサポートしている場合、これにより画面がクリアされ、カーソルが最初の行、最初の列に移動します。
System.out.print("\033[H\033[2J");
System.out.flush();
これは、ほぼすべてのUNIX端末および端末エミュレーターで機能します。窓 cmd.exe
は、ANSIエスケープコードを解釈しません。
このコードを試してください
import Java.io.IOException;
public class CLS {
public static void main(String... arg) throws IOException, InterruptedException {
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
}
}
ここで、Javaプロセスがコンソールに接続されると、コンソールがクリアされます。
_Runtime.getRuntime().exec("PlatformDepedentCode");
_
「PlatformDependentCode」をプラットフォームのクリアコンソールコマンドに置き換える必要があります。
exec()
メソッドは、コンソールに入力されたかのように、引数として入力したコマンドを実行します。
Windowsでは、Runtime.getRuntime().exec("cls");
と記述します。
次のコードを使用します。
System.out.println("\f");
'\ f'は、FormFeedを表すエスケープシーケンスです。これは、コンソールをクリアするためにプロジェクトで使用したものです。これは他のコードよりも簡単だと思います。
コンソールにクリアするよう指示する必要があります。
シリアル端末の場合、これは通常、いわゆる「エスケープシーケンス」を介して行われます。特に、 vt1 セットは非常に一般的にサポートされています(およびその近いANSIいとこ)。
Windowsは、従来、このようなシーケンスを「すぐに使用可能」にサポートしていませんでしたが、これらのことを行うためにAPI呼び出しに依存していました。ただし、DOSベースのWindowsの場合は、ANSI.SYSドライバーをインストールして、そのようなサポートを提供できます。
したがって、Windowsを使用している場合は、適切なWindows APIと対話する必要があります。標準のJavaランタイムライブラリにそうするためのコードが含まれているとは思わない。
単純なforループ印刷 "\ b"を使用してclrscr()を簡単に実装できます。