如何解决MediaPlayer.getTotalDuration().toSeconds() 在 Initialize 方法中调用时返回 NaN
我正在使用 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 准备好后调用它,以便滑块从一开始就自动工作。如果我将它放在 initialize 方法中,mediaPlayerMain.getTotalDuration().toSeconds()
将返回 NaN,因此根据 Duration API,周期必须是 UNKNOWN。
如何等待 mediaPlayer 对象准备好以便滑块工作? 感谢任何帮助,提前致谢!
解决方法
不像
@FXML
private Slider timeSlider ;
@FXML
private MediaPlayer mediaPlayerMain ;
@FXML
private void initialize() {
if (mediaPlayerMain.getStatus() == MediaPlayer.Status.UNKNOWN) {
mediaPlayerMain.statusProperty().addListener((obs,oldStatus,newStatus) -> {
if (newStatus == MediaPlayer.Status.READY) {
initializeSlider();
}
});
} else {
initializeSlider();
}
}
private void initializeSlider() {
timeSlider.setMax(mediaPlayerMain.getTotalDuration().toSeconds());
mediaPlayerMain.currentTimeProperty().addListener((obs,oldTime,newTime) ->
timeSlider.setValue(newTime.toSeconds()));
}
工作?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。