【发布时间】:2011-02-28 02:14:21
【问题描述】:
谁能告诉我Java中用于清除屏幕的代码是什么?
例如,在 C++ 中:
system("CLS");
Java中用什么代码清屏?
【问题讨论】:
谁能告诉我Java中用于清除屏幕的代码是什么?
例如,在 C++ 中:
system("CLS");
Java中用什么代码清屏?
【问题讨论】:
由于这里有几个答案显示 Windows 的非工作代码,所以这里澄清一下:
Runtime.getRuntime().exec("cls");
此命令不起作用,原因有两个:
在标准 Windows 安装中没有名为 cls.exe 或 cls.com 的可执行文件可以通过 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 操作系统和 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.
}
}
请注意,如果您在 IDE 中运行,此方法通常不会清除控制台。
【讨论】:
java.io.IOException: Cannot run program "cls": CreateProcess error=2, The system cannot find the file specified
cls 可执行文件。这是cmd.exe的内部命令。
像这样在你的类中创建一个方法:[as @Holger said here.]
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
我不建议你使用这种方法。
【讨论】:
实现这一点的一种方法是打印多个行尾 ("\n") 并模拟清屏。最后明确,最多在unix shell中,不删除之前的内容,只是向上移动,向下滚动可以看到之前的内容。
这是一个示例代码:
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 and ANSI is supported 是否也值得做。
以下代码对我有用:
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 中运行它。
【讨论】:
尝试以下方法:
System.out.print("\033\143");
这在 Linux 环境下可以正常工作
【讨论】:
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) {}
}
【讨论】:
如果您在 Bluej 或任何其他类似软件中执行此操作,这将起作用。
System.out.print('\u000C');
【讨论】:
试试这个:仅适用于控制台,不适用于 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) {}
}
【讨论】:
您可以将cls 的模拟与
for (int i = 0; i < 50; ++i) System.out.println();
【讨论】:
您需要使用控制字符作为反斜杠 (\b) 和回车 (\r)。它默认禁用,但控制台视图可以解释这些控件。
Windows>Preferences 和 Run/Debug > Console 并选择 Interpret ASCII control characters 以启用它
完成这些配置后,您可以使用以下控制字符来管理控制台:
\t - 制表符。
\b - 退格(文本后退一步或删除单个字符)。
\n - 换行。
\r - 回车。 ()
\f - 换页。
更多信息请访问:https://www.eclipse.org/eclipse/news/4.14/platform.php
【讨论】:
您需要使用 JNI。
首先使用 Visual Studio 创建一个 .dll,调用 system("cls")。 之后使用 JNI 来使用这个 DDL。
我发现这篇文章很好:
http://www.planet-source-code.com/vb/scripts/ShowCode.asp?txtCodeId=5170&lngWId=2
【讨论】: