刷新Java中的单个控制台行

时间:2012-12-15 08:18:36

标签: java io outputstream

我正在实现一个命令行的mp3播放器。

我希望像这样显示mp3持续时间

Now Playing :: hello.mp3 Duration :: 1.20 

但是当我使用System.out.println时,它会显示

Now Playing :: hello.mp3 Duration :: 1.20 
Now Playing :: hello.mp3 Duration :: 1.21 
Now Playing :: hello.mp3 Duration :: 1.22 
Now Playing :: hello.mp3 Duration :: 1.23 
Now Playing :: hello.mp3 Duration :: 1.24 
Now Playing :: hello.mp3 Duration :: 1.25
..... 

基本上是线程更新的持续时间,我想将它显示为单行,我的意思是持续时间必须以单行更新。我看到了Flushable interface但没有得到它。请帮帮我

这是我的主题

while(p.getPlayer().isComplete() == false){
String bOutput = "\r Duration ::" + (int) ((p.getPlayer().getPosition() / (1000*60)) % 60) + " : " + (int) (p.getPlayer().getPosition() / 1000) % 60;
//p.getBufferedOutputStream().write(bOutput.getBytes());
//p.getBufferedOutputStream().flush();
System.out.println(bOutput);

Thread.sleep(1000);
}

2 个答案:

答案 0 :(得分:0)

很明显有些事情多次调用println。如果您不想要多行,请更改您的代码,使其不会这样做。

这既不是线程的“错误”,也不是println的“错误”,它与刷新无关。问题在于你的代码的逻辑......但我们不能再说了,因为你还没有向我们展示。

答案 1 :(得分:0)

while(p.getPlayer().isComplete() == false){
String bOutput = "Duration ::" + (int) ((p.getPlayer().getPosition() / (1000*60)) % 60) + " : " + (int) (p.getPlayer().getPosition() / 1000) % 60;
System.out.println(bOutput+"\r");

Thread.sleep(1000);
}

这解决了我的问题。

注意:我在Eclipse Console中看不到任何效果,当我在CMD上运行时,其工作