我对 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”类型,并且 Duration class具有诸如 toMinutes()
和 toSeconds()
之类的方法,但我无法将它们应用于 newVal
,而且我不明白为什么。
我可以创建一个新的 Duration 对象:
Duration testDuration = Duration.millis(100000);
然后使用方法:
double secondsDuration = testDuration.toSeconds();
// 100.0
因此,如果 testDuration
和 newVal
都是持续时间对象,为什么我不能将这些方法应用于 newval
?
总的来说,我走在正确的道路上吗?我知道必须有一些字符串格式才能使我的输出正确,但在我看来,首先我需要以非字符串格式从 newVal 获取值。
提前致谢。
最佳答案
这是因为你的 newVal 是一个对象而不是一个持续时间。您可以转换它并取消引用它,例如 ((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
}
};
关于JavaFX ChangeListener 持续时间问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22117710/