如何在CMD中分离Java程序的输出?



我想在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是一个很好的。

最新更新