【问题标题】:javaFX MediaPlayer getCurrentTime() unreliablejavaFX MediaPlayer getCurrentTime() 不可靠
【发布时间】:2013-06-18 09:17:07
【问题描述】:

要播放 mp3 文件,我使用的是 javafx.scene.media.MediaPlayer 类。 但是我注意到使用seek()方法后currentTimeProperty是不可靠的。

当用户选择了一个mp3文件时,下面代码中的initMediaPlayer()方法会被调用。播放时间显示在时间滑块 (=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 吗?

标签: java media-player javafx


【解决方案1】:

你想要ChangeListener<Duration>,而不是InvalidationListener

audioPlayer.currentTimeProperty().addListener((observableValue, oldDuration, newDuration) -> {
     System.out.println("Player:" + observableValue + " | Changed from playing at: " + oldDuration + " to play at " + newDuration);
});

【讨论】:

  • 您能否为您的答案提供更多细节?
  • @NT3RP 我添加了一段示例代码。他只是添加了错误的听众。我不确定可能会有哪些后续问题。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-13
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
相关资源
最近更新 更多