JavaFX ChangeListener持续时间问题

时间:2014-03-01 17:26:42

标签: java audio javafx

我是Java的新手,在仔细研究了文档之后,我发现自己陷入困境。

我有一个小程序,使用JavaFX MediaPlayer播放wav文件。我的播放器对象有一个currentTimeProperty,我想在几分钟内显示这个属性的输出:播放期间的秒数。

所以我在一个函数的末尾有这个,它接收我的wav文件并初始化播放器:

mediaPlayer = new MediaPlayer(wav);
mediaPlayer.currentTimeProperty().addListener(new TimeListener());

然后我有:

public class TimeListener implements ChangeListener {
    public void changed(ObservableValue o, Object oldVal, Object newVal) {

    //Update time display with MediaPlayer's current time:
    currTimeLabel.setText(newVal.toString());
    }
}

这很有效。在播放wav期间,我的currTimeLabel会以当前时间更新,以毫秒为单位。问题是,我希望这几分钟:秒。

变量newVal列为“持续时间”类型,Duration class包含toMinutes()toSeconds()等方法,但我无法将其应用于{{ 1}},我不明白为什么。

我可以创建一个新的Duration对象:

newVal

然后使用方法:

Duration testDuration = Duration.millis(100000);

因此,如果double secondsDuration = testDuration.toSeconds(); // 100.0 testDuration都是持续时间对象,为什么我不能将这些方法应用于newVal

总的来说,我是走在正确的轨道上吗?我知道必须有一些字符串格式才能使我的输出正确,但在我看来,首先我需要以非字符串格式从newVal获取值。

提前致谢。

1 个答案:

答案 0 :(得分:1)

这是因为你的newVal是一个Object而不是Duration。您可以将其投射并取消引用,例如((Duration)newVal).另一种更好的方法是制作您的方法ChangeListener<Duration>

TimeListener = new ChangeListener<Duration>() {
      @Override public void changed(ObservableValue<? extends Duration> o, Duration oldVal, Duration newVal) {
     //now newVal is of Duration class
      }
    };