MediaPlayer播放音频经常中断问题

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

        button.setOnAction(new EventHandler() {
            @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() {
            @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播放音频经常中断问题)