【问题标题】:Flushing single Console line in Java在 Java 中刷新单个控制台行
【发布时间】:2012-12-15 08:18:35
【问题描述】:

我正在实现一个 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);
}

【问题讨论】:

标签: java io outputstream


【解决方案1】:

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

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

【讨论】:

  • @ShantanuBanerjee 我对您的代码了解不多,但您也可以使用 Timer。
【解决方案2】:
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 上运行它时,它会起作用

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多