Відповіді:
Оскільки тут є кілька відповідей, що показують непрацюючий код для 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 OS та випадку Linux / Unix OS (це означає, що він також працює для 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 + "'.");
}
}
}
Запустивши це, якщо ви введете 'clear' у відповідь, це очистить екран. Переконайтеся, що ви запускаєте його з належного термінала / консолі, а не в 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 - зворотний простір (крок назад у тексті або видалення одного символу).
\ n - новий рядок.
\ r - повернення вагона. ()
\ f - форму подачі.
Більше інформації на сайті: https://www.eclipse.org/eclipse/news/4.14/platform.php
Вам потрібно використовувати JNI.
Перш за все використовуйте create .dll за допомогою візуальної студії, що викликає систему ("cls"). Після цього використовуйте JNI для використання цього DDL.
Я знайшов цю статтю приємною:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=5170&lngWId=2