我正在尝试使用Java制作一个跨平台的控制台进度指示器。因此我使用System.out.printf方法打印出一个百分比:
System.out.printf("\t%2.2f%%\b\b\b\b\b\b", percentage);
我把代码放在了一个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();
}
}
}
我认为这个问题与编译器优化有关,但我不确定。奇怪的是,当for循环正在运行时,
System.out.println
确实会打印。编辑:我忘记将其添加到问题中。但我已经尝试过刷新缓冲区。这没有任何区别。在我的printf行末尾添加
%n
可以解决问题,但它会开始一个新行,我真的需要重用当前行。所有反对的解决方案都有效。但它们只适用于真正的控制台,而不是NetBeans或Eclipse控制台。
try { Thread.sleep (10); } catch (InterruptedException ignored) {}
。 - user unknown