Java: Kosongkan konsol


Jawaban:


114

Karena ada beberapa jawaban di sini yang menunjukkan kode tidak berfungsi untuk Windows, berikut ini klarifikasinya:

Runtime.getRuntime().exec("cls");

Perintah ini tidak berfungsi, karena dua alasan:

  1. Tidak ada nama yang dapat dieksekusi cls.exeatau cls.comdalam penginstalan Windows standar yang dapat dipanggil melalui Runtime.exec, karena perintah terkenal dibangun di dalam clspenerjemah baris perintah Windows.

  2. Saat meluncurkan proses baru lewat Runtime.exec, output standar dialihkan ke pipa yang dapat dibaca oleh proses Java yang memulai. Tetapi ketika output dari clsperintah dialihkan, konsol tidak dihapus.

Untuk mengatasi masalah ini, kita harus memanggil command line interpreter ( cmd) dan memerintahkannya untuk mengeksekusi perintah ( /c cls) yang memungkinkan memanggil perintah bawaan. Selanjutnya kita harus langsung menghubungkan saluran keluarannya ke saluran keluaran proses Java, yang bekerja dimulai dengan Java 7, menggunakan inheritIO():

import java.io.IOException;

public class CLS {
    public static void main(String... arg) throws IOException, InterruptedException {
        new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
    }
}

Sekarang ketika proses Java terhubung ke konsol, yaitu telah dimulai dari baris perintah tanpa pengalihan keluaran, itu akan menghapus konsol.


1
Mengapa ini tidak berhasil untuk saya? Saya menjalankan program pada windows CMD tetapi layarnya tidak dibersihkan
Alist3r

93

Anda dapat menggunakan kode berikut untuk menghapus konsol baris perintah:

public static void clearScreen() {  
    System.out.print("\033[H\033[2J");  
    System.out.flush();  
}  

Untuk referensi lebih lanjut kunjungi: http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html


2
Mau menambahkan ini sama sekali? Apa string ini dan apakah Anda perlu mengosongkan jika penyiraman otomatis diaktifkan?
cossacksman

7
Mereka adalah kode pelarian ANSI . Layar khusus yang jelas, diikuti oleh home . Tetapi mengapa 'rumah' diperlukan?
jdurston

2
@jdurston mengabaikan beranda tidak akan menyetel ulang kursor ke bagian atas jendela.
Hugo Zink

1
Tidak bekerja di Eclipse, tapi bekerja di terminal Linux. Satu suara untuk Anda
Anh Tuan

9
Ini hanya berfungsi jika emulator terminal tempat Java dijalankan, mendukung kode escape ANSI. Windows NT / XP / 7/8/10 CMD tidak
Thorbjørn Ravn Andersen

21

Beginilah cara saya menanganinya. Metode ini akan bekerja untuk kasus OS Windows dan kasus Linux / Unix OS (yang berarti juga berfungsi untuk Mac OS X).

public final static void clearConsole()
{
    try
    {
        final String os = System.getProperty("os.name");

        if (os.contains("Windows"))
        {
            Runtime.getRuntime().exec("cls");
        }
        else
        {
            Runtime.getRuntime().exec("clear");
        }
    }
    catch (final Exception e)
    {
        //  Handle any exceptions.
    }
}

Perhatikan bahwa metode ini umumnya tidak akan menghapus konsol jika Anda menjalankannya di dalam IDE.


10
Di Windows 8.1:java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
Ben Leggiero

1
@BenLeggiero Kesalahan itu terjadi jika karena alasan tertentu perintah cls tidak ditemukan oleh JVM dalam beberapa direktori dari variabel lingkungan PATH. Semua kode ini lakukan adalah memanggil perintah sistem Windows atau Unix berdasarkan konfigurasi sistem default untuk menghapus masing-masing jendela prompt perintah atau jendela terminal. Ini harus sama persis dengan membuka jendela terminal dan mengetik "cls" diikuti dengan tombol Enter.
Dyndrilliac

23
Tidak ada yang clsdapat dieksekusi di Windows. Ini adalah perintah internalcmd.exe .
a_horse_with_no_name

7
Seperti yang dikatakan oleh orang lain, tidak berfungsi sama sekali , tidak hanya karena Windows tidak memiliki cls yang dapat dieksekusi, tetapi juga karena output subproses dialihkan.
Holger

2
Jawaban ini juga merupakan topik di meta see: meta.stackoverflow.com/questions/308950/…
Petter Friberg

15

Sebuah cara untuk mendapatkan ini dapat dengan mencetak beberapa ujung baris ("\ n") dan mensimulasikan layar yang jelas. Pada akhirnya jelas, paling banyak di shell unix, tidak menghapus konten sebelumnya, hanya memindahkannya ke atas dan jika Anda membuat gulir ke bawah dapat melihat konten sebelumnya.

Berikut ini contoh kode:

for (int i = 0; i < 50; ++i) System.out.println();

13
Cara yang lebih cepat untuk melakukannya adalah dengan mencetak satu string 50 \r\ndengan satu println, karena ada penundaan yang nyata di antara printlnpanggilan.
Ben Leggiero

8
Bagaimana Anda tahu berapa banyak baris yang dikonfigurasi konsol untuk ditampilkan? Mungkin berhasil dalam banyak kasus, tetapi tidak semua.
Cypher

4
Perbedaan terbesar antara this dan proper clearadalah di yang terakhir, keluaran baru akan berada di bagian atas layar dan bukan di bagian bawah.
ndm13

5
System.out.println(new String(new char[50]).replace("\0", "\r\n"));akan melakukan pekerjaan lebih cepat dan lebih baik.
Aaron Esau

1
@AaronEsau dimulai dengan JDK 11, Anda dapat menggunakanSystem.out.println(System.lineSeparator().repeat(50));
Holger

15

Jika Anda menginginkan cara yang lebih independen dari sistem untuk melakukan ini, Anda dapat menggunakan perpustakaan JLine dan ConsoleReader.clearScreen () . Pemeriksaan hati-hati apakah JLine dan ANSI didukung di lingkungan saat ini mungkin perlu dilakukan juga.

Sesuatu seperti kode berikut berfungsi untuk saya:

import jline.console.ConsoleReader;

public class JLineTest
{
    public static void main(String... args)
    throws Exception
    {
        ConsoleReader r = new ConsoleReader();

        while (true)
        {
            r.println("Good morning");
            r.flush();

            String input = r.readLine("prompt>");

            if ("clear".equals(input))
                r.clearScreen();
            else if ("exit".equals(input))
                return;
            else
                System.out.println("You typed '" + input + "'.");

        }
    }
}

Saat menjalankan ini, jika Anda mengetik 'clear' saat diminta, layar akan dihapus. Pastikan Anda menjalankannya dari terminal / konsol yang tepat dan bukan di Eclipse.


14

Buat metode di kelas Anda seperti ini: [seperti yang dikatakan @Holger di sini .]

public static void clrscr(){
    //Clears Screen in java
    try {
        if (System.getProperty("os.name").contains("Windows"))
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        else
            Runtime.getRuntime().exec("clear");
    } catch (IOException | InterruptedException ex) {}
}

Ini berfungsi untuk windows setidaknya, saya belum memeriksa Linux sejauh ini. Jika ada yang memeriksanya untuk Linux, beri tahu saya jika berfungsi (atau tidak).

Sebagai metode alternatif adalah dengan menulis kode ini di clrscr():

for(int i = 0; i < 80*300; i++) // Default Height of cmd is 300 and Default width is 80
    System.out.print("\b"); // Prints a backspace

Saya tidak akan merekomendasikan Anda untuk menggunakan metode ini.


11

Coba yang berikut ini:

System.out.print("\033\143");

Ini akan bekerja dengan baik di lingkungan Linux


1
Itu harus di atas! Bekerja di konsol Linux.
Zahid Khan

7

Runtime.getRuntime (). Exec (cls) TIDAK berfungsi di laptop XP saya. Ini -

for(int clear = 0; clear < 1000; clear++)
  {
     System.out.println("\b") ;
  }

Semoga bermanfaat


jika Anda dapat mengatur lokasi indeks buffer untuk memulai, ini akan menjadi satu-satunya pendekatan termudah
DevilInDisguise

1
Jika prosesnya terputus, saya membayangkan Anda akan melihat kelambatan dengan beberapa print.out dihapus sebelum yang lain.
TrevorLee

2

Ini akan berfungsi jika Anda melakukan ini di Bluej atau perangkat lunak serupa lainnya.

System.out.print('\u000C');

1

Anda dapat menggunakan emulasi clsdengan for (int i = 0; i < 50; ++i) System.out.println();


2
Ini hanya petunjuk, mungkin seseorang ingin membersihkan layar, Sebenarnya
Sarz

@Sarz: dan sebenarnya "membersihkan layar" tidak masuk akal dengan sendirinya, baik
Gyom

1

Anda perlu menggunakan karakter kontrol sebagai garis miring terbalik (\ b) dan carriage return (\ r). Ini dinonaktifkan secara default, tetapi tampilan Konsol dapat menafsirkan kontrol ini.

Windows> Preferensi dan Run / Debug> Konsol dan pilih Interpretasikan karakter kontrol ASCII untuk mengaktifkannya

Preferensi konsol di Eclipse

Setelah konfigurasi ini, Anda dapat mengelola konsol Anda dengan karakter kontrol seperti:

\ t - tab.

\ b - spasi mundur (langkah mundur dalam teks atau penghapusan satu karakter).

\ n - baris baru.

\ r - kereta kembali. ()

\ f - umpan formulir.

animasi yang jelas konsol gerhana

Informasi lebih lanjut di: https://www.eclipse.org/eclipse/news/4.14/platform.php


0

Coba ini: hanya berfungsi di konsol, bukan di konsol terintegrasi NetBeans.

    public static void cls(){
try {

    if (System.getProperty("os.name").contains("Windows"))
        new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
    else
        Runtime.getRuntime().exec("clear");
} catch (IOException | InterruptedException ex) {}

}


0

Dengan menggabungkan semua jawaban yang diberikan, metode ini harus bekerja di semua lingkungan:

public static void clearConsole() {
    try {
        if (System.getProperty("os.name").contains("Windows")) {
            new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
        }
        else {
            System.out.print("\033\143");
        }
    } catch (IOException | InterruptedException ex) {}
}

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.