java - 在java中擦除以前的输出行
问题描述
我一直在制作一个终端风格的东西,但我仍然遇到的唯一问题(到目前为止)是加载屏幕。我只是想添加它需要加载的错觉,没什么太复杂的。我需要删除之前的输出行,这样它就会像加载屏幕一样加载。我在这里查看了很多 Q/As,但我尝试的一切都没有帮助我总是得到随机文本,或者文本不在它应该在的位置,或者它根本不起作用。我正在使用 Bluej。
当前代码:
public static void main(String [] args){
try{
System.out.println("▒█▀▀▀█ █▀▀█ █▀▀█ █▀▀█ ▀▀█▀▀ █▀▀█ █▀▀▄");
Thread.sleep(1000);
System.out.println("░▀▀▀▄▄ █░░█ █▄▄█ █▄▄▀ ░░█░░ █▄▄█ █░░█");
Thread.sleep(1000);
System.out.println("▒█▄▄▄█ █▀▀▀ ▀░░▀ ▀░▀▀ ░░▀░░ ▀░░▀ ▀░░▀");
Thread.sleep(1000);
System.out.println("o()xxxxxx[{:::::::::::::::::::::::::::::::>");
Thread.sleep(1000);
System.out.println("Loading... 0%");
Thread.sleep(2000);
//Code goes here
System.out.println("Loading... 13%");
Thread.sleep(2000);
//Code goes here
System.out.println("Loading... 42%");
Thread.sleep(2000);
//Code goes here
System.out.println("Loading... 74%");
Thread.sleep(4000);
//Code goes here
System.out.println("Loading... 92%");
Thread.sleep(1000);
//Code goes here
System.out.println("Loading... 100%");
}
catch (InterruptedException e) {
System.err.format("IOException: %s%n", e);
}
}
我想发布完整的输出,但艺术不会与此混合,所以这就是它所说的,减去艺术:
斯巴达人
加载中... 0%
加载中... 13%
加载中... 42%
加载中... 74%
加载中... 92%
加载中... 100%
它不应该显示几个“正在加载...”
在合理范围内,我愿意接受任何建议。
解决方案
这应该可以解决问题:
public static void main(String [] args){
try{
System.out.println("▒█▀▀▀█ █▀▀█ █▀▀█ █▀▀█ ▀▀█▀▀ █▀▀█ █▀▀▄");
Thread.sleep(1000);
System.out.println("░▀▀▀▄▄ █░░█ █▄▄█ █▄▄▀ ░░█░░ █▄▄█ █░░█");
Thread.sleep(1000);
System.out.println("▒█▄▄▄█ █▀▀▀ ▀░░▀ ▀░▀▀ ░░▀░░ ▀░░▀ ▀░░▀");
Thread.sleep(1000);
System.out.println("o()xxxxxx[{:::::::::::::::::::::::::::::::>");
Thread.sleep(1000);
System.out.print("Loading... 0%xxxxxxxx");
Thread.sleep(2000);
//Code goes here
System.out.print("\033[2K");
System.out.print("\rLoading... 13%");
Thread.sleep(2000);
//Code goes here
System.out.print("\033[2K");
System.out.print("\rLoading... 42%");
Thread.sleep(2000);
//Code goes here
System.out.print("\033[2K");
System.out.print("\rLoading... 74%");
Thread.sleep(4000);
//Code goes here
System.out.print("\033[2K");
System.out.print("\rLoading... 92%");
Thread.sleep(1000);
//Code goes here
System.out.print("\033[2K");
System.out.print("\rLoading... 100%");
}
catch (InterruptedException e) {
System.err.format("IOException: %s%n", e);
}
}
"\033[2K" 删除当前行,"\r" 将光标带回行首并覆盖已写入的内容。
您也可以只使用“\r”,但它会有以下行为:
System.out.print("Loading... 0%xxxx");
System.out.print("\rLoading... 13%");
结果输出将是Loading... 13%xxx
因为第二个打印语句没有清除整行 - 它只是覆盖了已经存在的内容!
推荐阅读
- bash - 如何从 kubectl 转发 psql shell
- asp.net - Vue.js list binding doesn't work
- c# - c# asp multi threading or web method
- javascript - Remove tooltip at out of hover
- asp.net-core-2.0 - ASP.NET Core 2.0 配置绑定
- tensorflow - 找不到“nvcuda.dll”TensorFlow
- javascript - 如何将连接、组件和功能导出到一个地方?(只需要建议)
- ios - 自定义 URL 方案在自己的应用程序中失败
- python - 最新版本的 Python/Pip 出现“tlsv1 警报协议版本”错误
- ios - 图层的翻转图像