繁体   English   中英

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

[英]How to separate the output of a Java program in CMD?

我想在 Java 中制作一个程序,该程序会生成不同的打印,但同时在 CMD 的第一行有一个时间计数器,即使我打印更多元素也会不断更新。

例如:

******* CMD ********
timer: 2 hours, 37 minutes and 37 seconds

First print
Second print
...
********************

我知道如何做计数器,我只是想让它在程序运行时保持在 CMD 出口的同一个地方。 我尝试使用\r ,但总是当我使用\n时 output 最终取消配置。

为了更通用,我想知道如何将 CMD 和 Java 分成“块”,以便每个块都有自己的 output。

// 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打印到“屏幕”,但实际上并非如此。 System.out 以 ZF7B44CFFAFD5C52223D5498196C8A2E7BZ 的形式发送字节(意思是:没有收回;无论您发送什么,都不能不发送)到“标准输出”,可以是任何东西。 它可能是一个文件: java -jar yourapp.jar >foo.txt 它甚至可以是打印机或传真机。

“返回 5 行”的概念并不是 systemout 作为一个概念本身所支持的。 例如,这就是允许您将标准连接到打印机(不能“打印”东西)的原因。

更糟糕的是, IF标准输出连接到屏幕,然后您如何执行特定于屏幕的操作(例如将背景颜色更改为蓝色,或上升 5 行,或回到行首无需向下滚动所有内容或发出声音)是操作系统和终端工具特定的 一些终端完全无法做到这一点 - 通常编辑器中的伪终端事物,如 eclipse、netbeans 和 intellij 只是不能被告知做任何这些事情。

测试是一场噩梦——例如,如果你在 mac 上开发,你如何测试你正在发送正确的 windows-terminal-specific 命令? 这是完全不可能的,除非你有一个 windows 终端仿真器(不存在),或者通过 parallels 或 virtualbox 虚拟地托管 windows,或者尝试用 wine 或 crossover 或 whatnotZ2 直接运行 ZDFFF0A7FA1A55C8C1A4966C19F6DA45.exe。 很费解。

因此,要么放弃这一点并制作一个实际的 GUI(例如,使用 swing 或 javafx),要么使用一个试图为您提供抽象的库,例如“返回一行”: Lanterna是一个不错的库。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM