Odpowiedzi:
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.exe
ani cls.com
w standardowej instalacji systemu Windows, który mógłby zostać wywołany za pośrednictwem Runtime.exec
, ponieważ dobrze znane polecenie cls
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ściowe cls
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ąc 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();
}
}
Teraz, gdy proces Java jest połączony z konsolą, tj. Został uruchomiony z wiersza poleceń bez przekierowania wyjścia, konsola zostanie wyczyszczona.
Możesz użyć następującego kodu, aby wyczyścić konsolę wiersza poleceń:
public static void clearScreen() {
System.out.print("\033[H\033[2J");
System.out.flush();
}
Więcej referencji można znaleźć na stronie: http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html
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).
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.
}
}
Zauważ, że ta metoda generalnie nie wyczyści konsoli, jeśli pracujesz w środowisku IDE.
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:
for (int i = 0; i < 50; ++i) System.out.println();
\r\n
z pojedynczym println
, ponieważ występuje zauważalne opóźnienie między println
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:
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 + "'.");
}
}
}
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 .]
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) {}
}
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 80
System.out.print("\b"); // Prints a backspace
Nie polecam Ci tej metody.
Runtime.getRuntime (). Exec (cls) NIE działa na moim laptopie XP. To zrobiło -
for(int clear = 0; clear < 1000; clear++)
{
System.out.println("\b") ;
}
Mam nadzieję, że to jest przydatne
Spróbuj wykonać następujące czynności:
System.out.print("\033\143");
To zadziała dobrze w środowisku Linux
To zadziała, jeśli robisz to w Bluej lub innym podobnym oprogramowaniu.
System.out.print('\u000C');
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
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