我想在Java中制作跨平台控制台进度指示器。因此我使用System.out.printf方法打印出一个百分比:Java 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();
}
}
}
我认为这个问题与编译器优化有关,但我不舒服。奇怪的是,当for循环运行时,System.out.println
会打印出来。
编辑:我忘了把它添加到问题。但我已经尝试冲洗缓冲区。这没有什么区别。将%n
添加到我的printf行的结尾,但它启动了一个换行符,我真的需要它重新使用当前行。
所有反对的解决方案的工作。但他们只能在真正的游戏机上工作。不是netbeans或eclipse控制台。
你的代码的工作,对我来说是有点快,所以我包括一个'尝试{ \t了Thread.sleep(10); } catch(InterruptedException ignored){}'。 – 2012-03-24 16:52:14