我正在尝试用 Java 制作跨平台控制台进度指示器。因此,我使用 System.out.printf 方法打印出一个百分比:
System.out.printf("\t%2.2f%%\b\b\b\b\b\b", percentage);
然后我将它放在一个 for 循环中。我遇到的问题是,在整个 for 循环完成之前,它不会打印任何内容。这是一个显示问题的程序示例:
public class Test {
public static void main(String[] args) {
for(int i =0; i<5000; i++){
System.out.printf("\b\b\b\b\b\b%2.2f%%", ((float) i/5000f)*100f);
System.out.flush();
}
}
}
我认为问题与编译器优化有关,但我不确定。奇怪的是 System.out.println
会在 for 循环运行时打印。
编辑:我忘了把它添加到问题中。但我已经尝试刷新缓冲区。这没有区别。将 %n
添加到我的 printf 行的末尾有效,但它开始换行,我真的需要它来重用当前行。
所有相反的解决方案都有效。但它们只适用于真正的控制台。不是 netbeans 或 eclipse 控制台。
最佳答案
那是因为输出流是行缓冲的。如果您在格式字符串的末尾添加一个“%n”,您还会生成一个换行符并且该行将被刷新(即打印)。或者调用 System.out.flush()
手动刷新输出流并强制打印缓冲内容。
关于Java printf 不打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9852705/