代码之家  ›  专栏  ›  技术社区  ›  swch

MediaPlayer在调用seek()之前不播放

  •  0
  • swch  · 技术社区  · 6 年前

    我试图在javafx中创建简单的mp3播放器,但是在调用MediaPlayer实例上的seek()方法之前,音频不会播放。

    public class Main extends Application {
    
        public static void main(String[] args) {
            launch(args);
        }
    
        private MediaPlayer mediaPlayer;
    
        @Override
        public void start(Stage stage) throws Exception {
            Media media = new Media(getClass().getResource("/test.mp3").toURI().toString());
            mediaPlayer = new MediaPlayer(media);
    
            mediaPlayer.statusProperty().addListener((observable, oldValue, newValue) -> {
                System.out.println(newValue);
                if(newValue == MediaPlayer.Status.READY) {
                    mediaPlayer.setAutoPlay(true);
                    mediaPlayer.play();
                }
            });
        }
    }
    

    控制台输出为:

    READY
    PLAYING
    

    但播放器不开始播放音频。当我用seek()方法添加另一个else if时,就开始播放了。

    mediaPlayer.statusProperty().addListener((observable, oldValue, newValue) -> {
        System.out.println(newValue);
        if(newValue == MediaPlayer.Status.READY) {
            mediaPlayer.setAutoPlay(true);
            mediaPlayer.play();
        } else if(newValue == MediaPlayer.Status.PLAYING) {
            mediaPlayer.seek(Duration.ONE);
        }
    });
    

    是JavaFX中的bug还是我遗漏了什么?我使用JDK11,在mac上使用openjdk构建openjdk。

    0 回复  |  直到 6 年前