JavaFX MediaPlayer切换到播放状态,但不播放mp3

时间:2017-11-26 13:06:40

标签: javafx mp3 media-player

我试图使用JavaFX MediaPlayer播放mp3文件。它加载文件并切换到PLAYING状态而没有任何错误,但它没有播放文件,currentTimeProperty也没有改变。我做错了什么?

public class Test extends Application {

    public static void main(String[] args) {
        launch(args);
    }

    @Override
    public void start(Stage primaryStage) throws Exception {
        MediaPlayer player = new MediaPlayer(new Media(
                new File("sounds/sound.mp3").toURI().toString()
        ));

        Button btn = new Button("Play");
        btn.setOnAction(event -> player.play());
        VBox pane = new VBox(10, btn);
        pane.setAlignment(Pos.CENTER);
        Scene scene = new Scene(pane, 100, 100);
        primaryStage.setScene(scene);
        primaryStage.show();
    }
}

2 个答案:

答案 0 :(得分:1)

您提供的代码可以正常使用。我不是MediaPlayer和MediaView类的专家,但假设您正在正确加载媒体而没有在加载mp3文件时获得MediaException: MEDIA_UNAVAILABLE,你的问题可能有两个原因。

  • 不支持您的文件格式。看看关于Java的Java Doc supported formats你会看到支持的mp3格式 是:原始MPEG-1,2和2.5音频;层I,II和III;所有 支持采样频率和比特率的组合。因此,如果 您的文件不受支持,您将无法播放它。轮到你了 可以使用下面的代码检查是否有任何错误。

player.setOnError(() -> System.out.println("Error : " + player.getError().toString()));

  • 过去我有一个类似的问题,有一个全新的Windows操作系统。如果您使用的是Windows,则操作系统可能没有必要的编解码器来播放视频/音频。在那,你的JavaFX应用程序将尝试播放音频,但你不会听到任何声音。要解决这个问题,你可以尝试安装一些我不熟悉的音频编解码器,但我建议使用K-Lite Codec Pack(进行谷歌搜索,你会没事的)

答案 1 :(得分:0)

我想你忘记了一部分试试这个

public static void main(String[] args) {
    launch(args);
}

@Override
public void start(Stage primaryStage) throws Exception {
    MediaPlayer player = new MediaPlayer(new Media(
            new File("sounds/sound.mp3").toURI().toString()
    ));

    Button btn = new Button("Play");
    btn.setOnAction(event -> player.play());
    VBox pane = new VBox(10, btn);
    pane.setAlignment(Pos.CENTER);
    Scene scene = new Scene(pane, 100, 100);

    MediaView mediaView = new MediaView(player);
    ((Group)scene.getRoot()).getChildren().add(mediaView);

    primaryStage.setScene(scene);
    primaryStage.show();
}