在Java中清空控制台

5

我有一个继承自Thread类的类。在它的run方法中有一个System.out.println语句。在执行这个打印语句之前,我想清除控制台。我该怎么做?

我尝试过

Runtime.getRuntime().exec("cls"); // and "clear" too  

并且

System.out.flush(); 

但是两者都没有起作用。

你需要使用Eclipse的API来完成这个任务。 - PM 77-1
我不想使用一系列打印空行的方法。我需要一种更优雅的清除控制台的方式。如果有的话,请告诉我。 - Akshu
简单的打印功能无法完成此项任务。您需要通知周围的终端模拟器进行此操作,这在Unix和DOS下通常是通过转义序列来实现的,但CMD.EXE不支持该功能。您对周围的终端模拟器有多少控制权? - Thorbjørn Ravn Andersen
请仅返回翻译后的文本:重复:https://dev59.com/1XA85IYBdhLWcg3wBOzh - OhadR
3个回答

5
你是在使用Mac系统吗?如果是的话,cls命令只适用于Windows系统。
Windows系统下:
Runtime.getRuntime().exec("cls");

Mac:

Runtime.getRuntime().exec("clear");

flush 简单地强制将所有缓冲输出立即写入。它不会清除控制台。

编辑 抱歉,这些清除只适用于实际使用控制台的情况。在eclipse中,没有办法以编程方式清除控制台。您必须放置空格或单击清除按钮。

因此,您真的只能使用类似这样的东西:

for(int i = 0; i < 1000; i++)
{
    System.out.println("\b");
}

2
您可以尝试类似以下示例,使用 System OS 依赖项:
final String operatingSystem = System.getProperty("os.name");

if (operatingSystem .contains("Windows")) {
    Runtime.getRuntime().exec("cls");
}
else {
    Runtime.getRuntime().exec("clear");
}

或者另一种方式实际上是一个不好的方式,但实际上是将退格键发送回控制台,直到清除为止。类似于:
for(int clear = 0; clear < 1000; clear++) {
    System.out.println("\b") ;
}

正如我之前提到的,我正在寻找比打印空行更优雅的方法 :)。我已经尝试了两种运行时方法,但都不起作用。 - Akshu

0

这是我在一个网站上找到的例子,希望它能起作用:

 public static void clearScreen() {
    System.out.print("\033[H\033[2J");
    System.out.flush();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接