MediaPlayer.getTotalDuration().toSeconds() returns 在 Initialize 方法中调用时为 NaN
MediaPlayer.getTotalDuration().toSeconds() returns NaN when called in Initialize method
我正在使用 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()
returns 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()));
}
工作?
我正在使用 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()
returns NaN 的初始化方法中,那么根据 Duration API.
如何等待 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()));
}
工作?