Ponieważ istnieje kilka odpowiedzi pokazujących niedziałający kod dla systemu Windows, oto wyjaśnienie:
Runtime.getRuntime().exec("cls");
To polecenie nie działa z dwóch powodów:
Nie ma pliku wykonywalnego o nazwie cls.exeani cls.comw standardowej instalacji systemu Windows, który mógłby zostać wywołany za pośrednictwem Runtime.exec, ponieważ dobrze znane polecenie clsjest wbudowane w interpreter wiersza poleceń systemu Windows.
Podczas uruchamiania nowego procesu przez Runtime.execstandardowe wyjście jest przekierowywane do potoku, który może odczytać inicjujący proces Java. Ale kiedy dane wyjściowe clspolecenia zostaną przekierowane, nie czyści konsoli.
Aby rozwiązać ten problem, musimy wywołać interpreter wiersza poleceń ( cmd) i powiedzieć mu, aby wykonał polecenie ( /c cls), które umożliwia wywoływanie poleceń wbudowanych. Ponadto musimy bezpośrednio połączyć jego kanał wyjściowy z kanałem wyjściowym procesu Java, który działa począwszy od Java 7, używając inheritIO():
@jdurston pomijanie home nie spowoduje zresetowania kursora z powrotem do górnej części okna.
Hugo Zink,
1
Nie działa w Eclipse, ale działa w terminalu Linux. Jeden głos dla Ciebie
Anh Tuan,
7
Działa to tylko wtedy, gdy emulator terminala, w którym działa Java, obsługuje kody ucieczki ANSI. Windows NT / XP / 7/8/10 CMD nie
Thorbjørn Ravn Andersen
19
Tak bym sobie z tym poradził. Ta metoda będzie działać w przypadku systemu operacyjnego Windows i systemu Linux / Unix OS (co oznacza, że działa również w przypadku systemu Mac OS X).
publicfinalstaticvoid clearConsole(){try{finalString os =System.getProperty("os.name");if(os.contains("Windows")){Runtime.getRuntime().exec("cls");}else{Runtime.getRuntime().exec("clear");}}catch(finalException e){// Handle any exceptions.}}
Zauważ, że ta metoda generalnie nie wyczyści konsoli, jeśli pracujesz w środowisku IDE.
W systemie Windows 8.1:java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
Ben Leggiero
1
@BenLeggiero Ten błąd występuje, jeśli z jakiegoś powodu komenda cls nie zostanie znaleziona przez maszynę JVM w jakimś katalogu ze zmiennej środowiskowej PATH. Wszystko, co robi ten kod, to wywołanie polecenia systemu Windows lub Unix w oparciu o domyślną konfigurację systemu, aby wyczyścić odpowiednio wiersz polecenia lub okno terminala. Powinno to być dokładnie to samo, co otwarcie okna terminala i wpisanie „cls”, a następnie klawisz Enter.
Dyndrilliac
22
W clssystemie Windows nie ma pliku wykonywalnego. Jest to polecenie wewnętrznecmd.exe .
a_horse_with_no_name
7
Jak powiedzieli inni, w ogóle nie działa , nie tylko dlatego, że Windows nie ma pliku wykonywalnego cls, ale także dlatego, że dane wyjściowe podprocesów są przekierowywane.
Sposobem na osiągnięcie tego może być wydrukowanie wielu końców linii („\ n”) i zasymulowanie przejrzystego ekranu. Na koniec wyczyść, co najwyżej w powłoce unixowej, nie usuwa poprzedniej zawartości, tylko przesuwa ją w górę i jeśli zrobisz przewiń w dół, możesz zobaczyć poprzednią zawartość.
Szybszym sposobem na osiągnięcie tego jest wydrukowanie pojedynczego ciągu 50 \r\nz pojedynczym println, ponieważ występuje zauważalne opóźnienie między printlnwywołaniami.
Ben Leggiero
7
Skąd wiesz, ile wierszy jest skonfigurowanych do wyświetlania konsoli? Może działać w większości przypadków, ale nie we wszystkich.
Cypher
4
Największą różnicą między tym a właściwym clearjest to, że w tym drugim nowe wyjście będzie na górze ekranu, a nie na dole.
ndm13
5
System.out.println(new String(new char[50]).replace("\0", "\r\n"));wykona pracę szybciej i lepiej.
Aaron Esau
1
@AaronEsau zaczynając od JDK 11, możesz użyćSystem.out.println(System.lineSeparator().repeat(50));
Po uruchomieniu tego, jeśli wpiszesz „wyczyść” po monicie, ekran zostanie wyczyszczony. Upewnij się, że uruchamiasz go z odpowiedniego terminala / konsoli, a nie w Eclipse.
Utwórz metodę w swojej klasie w następujący sposób: [jak powiedział tutaj @Holger .]
publicstaticvoid clrscr(){//Clears Screen in javatry{if(System.getProperty("os.name").contains("Windows"))newProcessBuilder("cmd","/c","cls").inheritIO().start().waitFor();elseRuntime.getRuntime().exec("clear");}catch(IOException|InterruptedException ex){}}
Działa to przynajmniej w systemie Windows, do tej pory nie sprawdzałem systemu Linux. Jeśli ktoś sprawdzi, czy działa pod Linuksem, daj mi znać, czy działa (czy nie).
Alternatywną metodą jest napisanie tego kodu w clrscr():
for(int i =0; i <80*300; i++)// Default Height of cmd is 300 and Default width is 80System.out.print("\b");// Prints a backspace
To tylko podpowiedź, może ktoś chce wyczyścić ekran, Właściwie
Sarz
@Sarz: i właściwie "czyszczenie ekranu" samo w sobie też nie ma sensu
Gyom,
0
Musisz użyć znaków sterujących jako ukośnika odwrotnego (\ b) i powrotu karetki (\ r). Jest domyślnie wyłączony, ale widok konsoli może interpretować te kontrolki.
Windows> Preferencje i Uruchom / Debuguj> Konsola i wybierz Interpretuj znaki kontrolne ASCII, aby ją włączyć
Po tych konfiguracjach możesz zarządzać konsolą za pomocą znaków sterujących, takich jak:
\ t - tab.
\ b - backspace (krok wstecz w tekście lub usunięcie pojedynczego znaku).
Odpowiedzi:
Ponieważ istnieje kilka odpowiedzi pokazujących niedziałający kod dla systemu Windows, oto wyjaśnienie:
To polecenie nie działa z dwóch powodów:
Nie ma pliku wykonywalnego o nazwie
cls.exe
anicls.com
w standardowej instalacji systemu Windows, który mógłby zostać wywołany za pośrednictwemRuntime.exec
, ponieważ dobrze znane poleceniecls
jest wbudowane w interpreter wiersza poleceń systemu Windows.Podczas uruchamiania nowego procesu przez
Runtime.exec
standardowe wyjście jest przekierowywane do potoku, który może odczytać inicjujący proces Java. Ale kiedy dane wyjściowecls
polecenia zostaną przekierowane, nie czyści konsoli.Aby rozwiązać ten problem, musimy wywołać interpreter wiersza poleceń (
cmd
) i powiedzieć mu, aby wykonał polecenie (/c cls
), które umożliwia wywoływanie poleceń wbudowanych. Ponadto musimy bezpośrednio połączyć jego kanał wyjściowy z kanałem wyjściowym procesu Java, który działa począwszy od Java 7, używającinheritIO()
:Teraz, gdy proces Java jest połączony z konsolą, tj. Został uruchomiony z wiersza poleceń bez przekierowania wyjścia, konsola zostanie wyczyszczona.
źródło
Możesz użyć następującego kodu, aby wyczyścić konsolę wiersza poleceń:
Więcej referencji można znaleźć na stronie: http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html
źródło
Tak bym sobie z tym poradził. Ta metoda będzie działać w przypadku systemu operacyjnego Windows i systemu Linux / Unix OS (co oznacza, że działa również w przypadku systemu Mac OS X).
Zauważ, że ta metoda generalnie nie wyczyści konsoli, jeśli pracujesz w środowisku IDE.
źródło
java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
cls
systemie Windows nie ma pliku wykonywalnego. Jest to polecenie wewnętrznecmd.exe
.Sposobem na osiągnięcie tego może być wydrukowanie wielu końców linii („\ n”) i zasymulowanie przejrzystego ekranu. Na koniec wyczyść, co najwyżej w powłoce unixowej, nie usuwa poprzedniej zawartości, tylko przesuwa ją w górę i jeśli zrobisz przewiń w dół, możesz zobaczyć poprzednią zawartość.
Oto przykładowy kod:
źródło
\r\n
z pojedynczymprintln
, ponieważ występuje zauważalne opóźnienie międzyprintln
wywołaniami.clear
jest to, że w tym drugim nowe wyjście będzie na górze ekranu, a nie na dole.System.out.println(new String(new char[50]).replace("\0", "\r\n"));
wykona pracę szybciej i lepiej.System.out.println(System.lineSeparator().repeat(50));
Jeśli chcesz zrobić to w sposób bardziej niezależny od systemu, możesz użyć biblioteki JLine i ConsoleReader.clearScreen () . Ostrożne sprawdzenie, czy JLine i ANSI są obsługiwane w obecnym środowisku, prawdopodobnie też warto zrobić.
Coś takiego jak poniższy kod zadziałało dla mnie:
Po uruchomieniu tego, jeśli wpiszesz „wyczyść” po monicie, ekran zostanie wyczyszczony. Upewnij się, że uruchamiasz go z odpowiedniego terminala / konsoli, a nie w Eclipse.
źródło
Utwórz metodę w swojej klasie w następujący sposób: [jak powiedział tutaj @Holger .]
Działa to przynajmniej w systemie Windows, do tej pory nie sprawdzałem systemu Linux. Jeśli ktoś sprawdzi, czy działa pod Linuksem, daj mi znać, czy działa (czy nie).
Alternatywną metodą jest napisanie tego kodu w
clrscr()
:Nie polecam Ci tej metody.
źródło
Runtime.getRuntime (). Exec (cls) NIE działa na moim laptopie XP. To zrobiło -
Mam nadzieję, że to jest przydatne
źródło
Spróbuj wykonać następujące czynności:
To zadziała dobrze w środowisku Linux
źródło
To zadziała, jeśli robisz to w Bluej lub innym podobnym oprogramowaniu.
źródło
Możesz użyć emulacji
cls
withfor (int i = 0; i < 50; ++i) System.out.println();
źródło
Musisz użyć znaków sterujących jako ukośnika odwrotnego (\ b) i powrotu karetki (\ r). Jest domyślnie wyłączony, ale widok konsoli może interpretować te kontrolki.
Windows> Preferencje i Uruchom / Debuguj> Konsola i wybierz Interpretuj znaki kontrolne ASCII, aby ją włączyć
Po tych konfiguracjach możesz zarządzać konsolą za pomocą znaków sterujących, takich jak:
\ t - tab.
\ b - backspace (krok wstecz w tekście lub usunięcie pojedynczego znaku).
\ n - nowa linia.
\ r - powrót karetki. ()
\ f - kanał formularza.
Więcej informacji: https://www.eclipse.org/eclipse/news/4.14/platform.php
źródło
Musisz użyć JNI.
Przede wszystkim utwórz plik .dll za pomocą programu Visual Studio, który wywołuje system („cls”). Następnie użyj JNI, aby użyć tego DDL.
Znalazłem ten artykuł, który jest fajny:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=5170&lngWId=2
źródło