美文网首页
MediaPlayer播放音频经常中断问题

MediaPlayer播放音频经常中断问题

作者: 风少侠 | 来源:发表于2019-08-23 10:12 被阅读0次

    最近在做javafx的音频播放时碰到一个奇怪的问题,一个7s的音频文件有时候可以正常播放,有时候又会中断,特别是播放过程中如果再次出发,几乎必然中断,为了排除其他影响,我简单写了个测试程序,核心代码是这样的:

            button.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    Media media = new Media(getClass().getResource("/course_game_lose_1.mp3").toString());
                    MediaPlayer player = new MediaPlayer(media);
                    player.setOnReady(new Runnable() {
                        @Override
                        public void run() {
                            player.play();
                        }
                    });
                }
            });
    

    点击播放的时候还是经常播放不完整,后来google许久发现这么一篇记录https://stackoverflow.com/questions/6241687/mediaplayer-stop-playing-after-about-5-seconds

    ,说是android中的mediaPlayer经常在播放5s后停止,下面给出的解答是MediaPlayer对象不能放在方法里面,要作为成员变量或者静态变量,意思要延长它的生命周期,防止被gc回收,想到javafx和android都是运行在jvm,所以我试了一下,确实可以解决问题:

    public class Main extends Application {
        MediaPlayer player;
    
        @Override
        public void start(Stage primaryStage) throws Exception {
    
            VBox root = new VBox();
            Button button = new Button();
            button.setText("播放");
            button.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event) {
                    Media media = new Media(getClass().getResource("/course_game_lose_1.mp3").toString());
                    player = new MediaPlayer(media);
                    player.setOnReady(new Runnable() {
                        @Override
                        public void run() {
                            player.play();
                        }
                    });
                }
            });
    
            root.getChildren().addAll(button);
            Scene scene = new Scene(root);
    
            primaryStage.setScene(scene);
            primaryStage.setWidth(400);
            primaryStage.setHeight(300);
            primaryStage.show();
        }
    
        public static void main(String[] args) {
            launch(args);
        }
    }
    

    不过让我不能理解的是音频尚未播放完,局部变量的mediaPlayer就会被回收吗,还是说这个并不是产生问题的根本原因?

    相关文章

      网友评论

          本文标题:MediaPlayer播放音频经常中断问题

          本文链接:https://www.haomeiwen.com/subject/zwkzsctx.html