我已经有一段时间了,并且过去三天已经破解了互联网,以便有效地清除Java中的控制台。
这样
for(int x = 0; x!=100; x++){
System.out.println();
}
很糟糕,因为您可以向上滚动并再次查看打印的语句。
Console.Clear();
以及它的所有变体对我都没有用。
Runtime.getRuntime().exec("cls");
在我试图使用它的任何情况下都没有用。
(我使用JCreator进行编码,我不知道这是否与我的问题有关)
joesumbody122的这种方式看起来很有趣:
private static void clearLine()
{
Console.Write(new string(' ', Console.BufferWidth - Console.CursorLeft));
}
和
private static void clearLine(int left, int top)
{
int pLeft = Console.CursorLeft;
int pTop = Console.CursorTop;
Console.setCursorPosition(left, top);
Console.Write(new string(' ', Console.BufferWidth - Console.CursorLeft));
Console.setCursorPosition(pLeft, pTop);
}
但遗憾的是我无法让它为我工作。它给了我错误,他从Console调用的所有方法都不存在。 java.io.*;
已导入他的方法专门清除了一行,所以如果有人可以使用它,(再次,我使用JCreator进行编码,我不知道这是否有任何内容做我的问题)我可以看到它被循环以清除所有行。
减少吸吮的方法?
回到此for(int x = 0; x!=100; x++){
System.out.println();
}
有没有办法阻止用户在命令行中向上滚动?要将光标设置在提示的左上角?这将使这种方法更有用。
另一种理论
有没有办法简单地告诉java在一个命令行中停止打印,在另一个命令行中开始打印,然后关闭第一个窗口,这样它似乎只清除了控制台,而是创建了一个全新的控制台?我在过去的两个小时里一直在思考这个问题,理论上它会起作用,但我不知道这样做的代码是否存在。
答案 0 :(得分:3)
没有可靠的方法可以在任何地方使用。你已经发现了这个。
通常,命令行输出进入终端回滚缓冲区,其中仅显示最后n
行,但前一行可通过滚动机制获得。命令行程序不直接写入此缓冲区,而是写入stdout
,在大多数情况下,写入到终端进程,然后显示数据。
某些终端程序(即支持ANSI转义的终端程序)可能会让您清除屏幕的可见部分。据我所知,只有Windows的cmd.exe通过清除整个回滚缓冲区来响应“清除屏幕”请求。在Linux AFAIK上,无法完全丢弃缓冲区。而且,在Windows上,cls
不是可执行命令,而是内置shell,因此您无法从Java System.exec()
运行它。
此外,任何命令行程序都可以将其输出重定向到一个文件而不让程序知道它,在这种情况下,“清除屏幕”没有多大意义。
如果您必须具有此级别的控制权,那么您将必须使用Swing,AWT或GWT等编写自己的显示窗口并管理其中的所有交互。
答案 1 :(得分:1)
如果它是一个命令行应用程序和你运行应用程序的终端/ shell支持ANSI转义码,那么你可以这样做:
System.out.print("\033[H\033[2J");
System.out.flush();
答案 2 :(得分:0)
答案取决于天气,您使用的是 Linux 还是 Windows 操作系统。如果您使用的是 linux 并想清除控制台,请尝试:
try {
new ProcessBuilder("/usr/bin/clear").inheritIO().start().waitFor();
} catch(Exception e) {}
如果您使用的是 Windows,请尝试:
try {
new ProcessBuilder("cmd", "/c", "cls").inheritIO().start().waitFor();
} catch(Exception e) {}
你可以用任何你想要的方式处理异常。没关系,因为你不会得到一个。