Java: очистить консоль
Может ли кто-нибудь тело, пожалуйста, скажите мне, какой код используется для ясного экрана в Java? Например в C++
system("CLS");
Какой код используется в Java для очистки экрана?
Спасибо!
11 ответов
Вы можете использовать следующий код для очистки консоли командной строки:
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, вот пояснение:
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-процесс подключен к консоли, т.е. запущен из командной строки без перенаправления вывода, он очистит консоль.
Вот как бы я справился с этим. Этот метод будет работать для случая ОС 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.
}
}
Попробуйте следующее:
System.out.print("\033\143");
Это будет хорошо работать в среде Linux
Для этого можно напечатать несколько концов строк ("\n") и смоделировать очистку экрана. В конце ясно, что самое большее в оболочке Unix, не удаляет предыдущий контент, только перемещает его вверх и, если вы сделаете прокрутку вниз, можно увидеть предыдущий контент.
Вот пример кода:
for (int i = 0; i < 50; ++i) System.out.println();
Создайте метод в своем классе следующим образом: [как сказал 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
Я не буду рекомендовать вам использовать этот метод.
Если вам нужен более независимый от системы способ сделать это, вы можете использовать библиотеку 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.
Runtime.getRuntime(). Exec(cls) НЕ работал на моем ноутбуке с XP. Это сделал -
for(int clear = 0; clear < 1000; clear++)
{
System.out.println("\b") ;
}
Надеюсь, это полезно
Объединив все данные ответы, этот метод должен работать во всех средах:
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) {}
}
Попробуйте следующее: работает только на консоли, а не в интегрированной консоли 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) {}
}
Это будет работать, если вы делаете это в Bluej или любом другом подобном программном обеспечении.
System.out.print('\u000C');
Вы можете использовать эмуляцию cls
с for (int i = 0; i < 50; ++i) System.out.println();
Вам необходимо использовать управляющие символы в виде обратной косой черты (\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