要播放mp3文件,我正在使用javafx.scene.media.MediaPlayer
類。 但我注意到使用seek()
方法後,currentTimeProperty不可靠。javaFX MediaPlayer getCurrentTime()不可靠
下面的代碼中的方法initMediaPlayer()
在用戶選擇了mp3文件時被調用。播放時間顯示在時間滑塊(=timeSlider
)中,用戶可以通過該滑塊移動以從歌曲中的任意位置開始播放。歌曲中的當前位置也顯示在標籤中(=timeLabel
)。
當我用play()
開始播放時,當我用pause()
或stop()
暫停或重新啓動歌曲時,一切正常。
問題是在使用seek()
之後,currentTimeProperty
不再正確。 這在歌曲結束時變得非常明顯,然後currentTimeProperty
有時比歌曲總時間長4秒。
這個問題的原因是什麼,有沒有辦法解決它?
private void initMediaPlayer() {
try {
audio = new Media(audioFile.toURI().toURL().toString());
audioPlayer = new MediaPlayer(audio);
} catch (MalformedURLException ex) {
Logger.getLogger(MainWindowController.class.getName())
.log(Level.SEVERE, null, ex);
}
audioPlayer.currentTimeProperty().addListener(new InvalidationListener() {
public void invalidated(Observable ov) {
Duration time = audioPlayer.getCurrentTime();
Duration total = audioPlayer.getTotalDuration();
if (!timeSlider.isValueChanging() &&
total.greaterThan(Duration.ZERO)){
timeSlider.setValue(time.toMillis()/total.toMillis() * 100);
}
timeLabel.setText(formatTime(time,total));
}
});
timeSlider.valueChangingProperty().addListener(new InvalidationListener() {
public void invalidated(Observable ov) {
audioPlayer.seek(audioPlayer.getTotalDuration()
.multiply(timeSlider.getValue()/100.0));
}
});
}
您是否有[SSCCE](http://sscce.org/)描述您的問題? – ItachiUchiha