【发布时间】:2021-05-20 20:45:49
【问题描述】:
我正在使用 JavaFX 开发 MediaPlayer 以完成 javaFX 课程。我正在尝试将文件总持续时间设置为滑块最大属性。然后我想将 Listener 添加到 currentTimeProperty,以便滑块跟踪时间线。
我写了一个运行良好的代码:
timeSlider.setMax(mediaPlayerMain.getTotalDuration().toSeconds());
System.out.println("Max value: " + mediaPlayerMain.getTotalDuration().toSeconds());
mediaPlayerMain.currentTimeProperty().addListener(new ChangeListener() {
@Override
public void changed(ObservableValue o, Object oldVal, Object newVal) {
timeSlider.setValue(mediaPlayerMain.getCurrentTime().toSeconds());
}
});
当我在视频已经播放时调用它时它会起作用。问题是我想在 MediaView 准备好后调用它,以便滑块从一开始就自动工作。如果我将它放在初始化方法中,mediaPlayerMain.getTotalDuration().toSeconds() 会返回 NaN,因此根据 Duration API,周期必须是 UNKNOWN。
如何等待 mediaPlayer 对象准备好让滑块工作? 任何帮助表示赞赏,在此先感谢!
【问题讨论】:
-
为什么不直接用媒体播放器的状态注册一个监听器,并在滑块变为
READY时设置滑块的最大值?这必须在当前时间更改之前发生。
标签: java javafx slider media-player duration