Ответы:
Так как здесь есть несколько ответов, показывающих нерабочий код для Windows, вот пояснение:
Runtime.getRuntime().exec("cls");
Эта команда не работает по двум причинам:
Не существует исполняемого файла с именем cls.exe
или cls.com
в стандартной установке Windows, который можно было бы вызвать с помощью Runtime.exec
, поскольку известная команда cls
встроена в интерпретатор командной строки Windows.
При запуске нового процесса через Runtime.exec
стандартный вывод перенаправляется в канал, который может прочитать инициирующий процесс Java. Но когда вывод cls
команды перенаправляется, консоль не очищается.
Чтобы решить эту проблему, мы должны вызвать интерпретатор командной строки ( cmd
) и сказать ему выполнить команду ( /c cls
), которая позволяет вызывать встроенные команды. Далее мы должны напрямую подключить его выходной канал к выходному каналу процесса Java, который работает, начиная с Java 7, используя 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();
}
}
Теперь, когда процесс Java подключен к консоли, то есть запущен из командной строки без перенаправления вывода, он очистит консоль.
Вы можете использовать следующий код для очистки консоли командной строки:
public static void clearScreen() {
System.out.print("\033[H\033[2J");
System.out.flush();
}
Для дальнейших ссылок посетите: http://techno-terminal.blogspot.in/2014/12/clear-command-line-console-and-bold.html
Вот как бы я справился с этим. Этот метод будет работать для случая ОС Windows и случая ОС Linux / Unix (что означает, что он также работает для 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.
}
}
Обратите внимание, что этот метод обычно не очищает консоль, если вы работаете внутри IDE.
java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
cls
Windows нет исполняемого файла. Это внутренняя команда cmd.exe
.
Для этого можно напечатать несколько концов строк ("\ n") и смоделировать очистку экрана. В конце ясно, что самое большее в оболочке Unix, не удаляет предыдущий контент, только перемещает его вверх и, если вы сделаете прокрутку вниз, можно увидеть предыдущий контент.
Вот пример кода:
for (int i = 0; i < 50; ++i) System.out.println();
\r\n
с одной println
, поскольку между println
вызовами заметна задержка .
clear
заключается в том, что в последнем случае новый вывод будет вверху экрана, а не внизу.
System.out.println(new String(new char[50]).replace("\0", "\r\n"));
будет делать работу быстрее и лучше.
System.out.println(System.lineSeparator().repeat(50));
Если вы хотите более системный независимый способ сделать это, вы можете использовать JLine библиотеку и ConsoleReader.clearScreen () . Вероятно, стоит также провести осторожную проверку того, поддерживаются ли JLine и ANSI в текущей среде.
Что-то вроде следующего кода работает для меня:
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 + "'.");
}
}
}
При выполнении этого, если вы введете «очистить» в командной строке, он очистит экран. Убедитесь, что вы запускаете его с правильного терминала / консоли, а не в Eclipse.
Создайте метод в своем классе следующим образом: [как сказал здесь @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) {}
}
Это работает для Windows, по крайней мере, я не проверял для Linux до сих пор. Если кто-нибудь проверит его на Linux, пожалуйста, дайте мне знать, работает ли он (или нет).
Как альтернативный способ написать этот код в 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
Я не буду рекомендовать вам использовать этот метод.
Runtime.getRuntime (). Exec (cls) НЕ работал на моем ноутбуке с XP. Это сделал -
for(int clear = 0; clear < 1000; clear++)
{
System.out.println("\b") ;
}
Надеюсь, это полезно
Попробуйте следующее:
System.out.print("\033\143");
Это будет хорошо работать в среде Linux
Это будет работать, если вы делаете это в Bluej или любом другом подобном программном обеспечении.
System.out.print('\u000C');
Вы должны использовать управляющие символы как обратную косую черту (\ b) и возврат каретки (\ r). По умолчанию он отключен, но представление консоли может интерпретировать эти элементы управления.
Windows> «Установки» и « Выполнить / Отладка»> «Консоль» и выберите « Интерпретировать символы управления ASCII», чтобы включить его
После этих настроек вы можете управлять своей консолью с помощью управляющих символов, таких как:
\ t - вкладка
\ b - backspace (шаг назад в тексте или удаление одного символа).
\ n - новая строка.
\ r - возврат каретки. ()
\ f - подача формы.
Дополнительная информация по адресу: https://www.eclipse.org/eclipse/news/4.14/platform.php.
Вам нужно использовать JNI.
Прежде всего используйте создать .dll с помощью visual studio, которая вызывает систему («cls»). После этого используйте JNI, чтобы использовать этот DDL.
Я нашел эту статью, которая хороша:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=5170&lngWId=2