我想在Java中制作一个程序,生成不同的打印,但同时在CMD的第一行上有一个时间计数器,即使我打印更多元素也会不断更新。
例如:
******* CMD ********
timer: 2 hours, 37 minutes and 37 seconds
First print
Second print
...
********************
我知道如何做计数器,我只是想让它在程序运行时留在CMD出口的同一个地方。我尝试使用r
,但是当我使用n
时,输出总是以不配置结束。
为了更通用,我想知道如何将CMD与Java分开为"块",以便每个块都有自己的输出。
// Another example
class Main {
public static void main(String[] args) {
// block 1
System.out.println("A");
// block 2
System.out.println("B");
//block 1 again
System.out.println("C");
}
}
/*
Output I want in CMD:
A
C
B
*/
这是抽象的问题。
你可能认为System.out
打印到"屏幕",但这不是实际发生的事情。系统。输出发送字节,作为一个流(意思是:没有收回;无论你发送的是什么,都将被发送到"标准输出",它可以是任何东西。它可能是一个文件:java -jar yourapp.jar >foo.txt
。它甚至可以是一台打印机或传真机。
"回溯5行"的概念并不是systemout作为一个概念本身所支持的。这就是允许你将标准连接到打印机(不能"取消打印"的东西)的原因,例如。
更糟糕的是,如果standardout连接到屏幕,那么如何做特定于屏幕的事情(例如将背景颜色更改为蓝色,或向上5行,或返回行首而不向下滚动一行,或发出可听到的声音)是操作系统和终端工具特定的。有些终端完全不能做到这一点——通常像eclipse、netbeans和intellij这样的编辑器中的伪终端功能就是不能被告知去做这些事情。
测试是一场噩梦——例如,如果你在mac上开发,你如何测试你正在发送正确的windows终端特定命令?这是完全不可能的,除非您有一个windows终端模拟器(不存在),或者通过parallels或virtualbox虚拟地托管windows,或者尝试直接使用wine或crossover或诸如此类的工具运行cmd.exe。很复杂。
因此,要么放弃这一点,做一个真正的GUI(使用swing或javafx,例如),或者使用一个库,试图给你的抽象,如"回一行":Lanterna是一个很好的。