Java printf未打印

Java printf未打印,java,printing,console,Java,Printing,Console,我试图用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

我试图用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();
        }
    }
}
公共类测试{
公共静态void main(字符串[]args){

对于(int i=0;i,这是因为输出流是行缓冲的。如果在格式字符串的末尾添加“%n”,则也会生成换行符,该行将被刷新(即打印)。或者调用
System.out.flush()
手动刷新输出流并强制打印缓冲内容。

添加对
flush()
的调用:


for(int i=0;i问题再次出现在刷新流。在
printf
之后添加此行:

System.out.flush();
System.out.println
正在刷新(很像C++的
尝试改用:


用于(int i=0;iFlush是一种方法,所以你肯定需要括号。我在我的原始代码中添加了括号,我发现它们没有被复制。我在发帖中修复了它。问题仍然没有解决。用新字符替换旧字符的目标是什么,这样你就可以得到类似于计数器的东西?我想做一个进度指示器。当我我不想打印5000行,但只想打印一行,显示已处理的百分比。谢谢你的帮助。原来是netbeans的控制台没有像普通控制台那样响应。你的代码对我有用,但速度有点快,所以我加入了一个
try{Thread.sleep(10);}catch(InterruptedException被忽略){}
。谢谢你的刷新提示!
System.out.flush();
for(int i =0; i<5000; i++){
    System.console().format("\b\b\b\b\b\b%2.2f%%", ((float) i/5000f)*100f);
    System.console().flush();
}