32

很长一段时间以来,我一直为此拉头发。我研究了一个小时如何在 Java 中清除控制台。

我发现的只是通过打印一堆行或执行这个来进行肮脏的黑客攻击

Runtime.getruntime.exec("cls/clear");

但是,似乎没有什么对我有用。真的没有任何方法可以像在 C ( clrscr();) 中那样在 Java 中清除控制台。没有任何外部库可以实现这一点。

请让我知道是否有人在使用正确的函数、库等之前做过此操作,而不是肮脏的黑客攻击。

4

7 回答 7

26

如果您的终端支持ANSI 转义码,这将清除屏幕并将光标移动到第一行第一列:

System.out.print("\033[H\033[2J");
System.out.flush();

这适用于几乎所有 UNIX 终端和终端仿真器。Windowscmd.exe不解释 ANSI 转义码。

于 2012-04-20T06:41:02.083 回答
8

试试这个代码

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 进程连接到控制台时,它将清除控制台。

于 2016-04-28T14:54:59.237 回答
3
Runtime.getRuntime().exec("PlatformDepedentCode");

您需要将“PlatformDependentCode”替换为您平台的明确控制台命令。

exec()方法执行您作为参数输入的命令,就像在控制台中输入一样。

在 Windows 中,您可以将其编写为Runtime.getRuntime().exec("cls");.

于 2012-04-20T06:25:05.603 回答
1

使用以下代码:


System.out.println("\f");

' \f ' 是一个转义序列,它代表FormFeed。这是我在项目中用来清除控制台的。我猜这比其他代码简单。

于 2017-12-01T17:01:52.437 回答
0

您需要指示控制台清除。

对于串行终端,这通常是通过所谓的“转义序列”完成的,特别是vt100集已成为非常普遍的支持(以及它的近亲 ANSI 表亲)。

Windows 传统上不支持这种“开箱即用”的序列,而是依靠 API 调用来完成这些事情。但是,对于基于 DOS 的 Windows 版本,可以安装 ANSI.SYS 驱动程序来提供此类支持。

所以如果你在 Windows 下,你需要与适当的 Windows API 交互。我不相信标准的 Java 运行时库包含这样做的代码。

于 2012-04-20T06:37:00.653 回答
0

您可以使用简单的 for 循环打印“\b”轻松实现 clrscr()。

于 2014-08-02T09:57:24.650 回答
-2

如果您使用的是 windows 并且有兴趣在运行程序之前清除屏幕,您可以编译从 .bat 文件调用它的文件。例如:


分类

java“编译类的名称是什么”


另存为“etc”.bat,然后在命令提示符下调用或双击文件运行

于 2017-04-07T16:45:05.850 回答