我是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获取值。
提前致谢。
答案 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
}
};