JavaFX MediaPlayer在某些音频文件上冻结

时间:2018-08-07 19:00:18

标签: java javafx

我正在尝试使用JavaFX播放mp3文件,但是某些mp3文件不起作用。当我尝试播放它们时,它们要么停止在0ms处,要么停止于某个看似随机的数字(例如78ms),但是同一文件将在一致的时间停止。无论如何,在反复试验中,媒体播放器的状态始终为PLAYING。这是我大多数mp3文件的问题,我不知道为什么。这是我用来运行这些测试的代码:

package mediatest;
import java.io.File;
import java.net.URISyntaxException;

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.GridPane;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.stage.FileChooser;
import javafx.stage.Stage;

public class MediaTest extends Application {
    private static MediaPlayer mediaPlayer;

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

  @Override
  public void start(Stage primaryStage) throws URISyntaxException {
    FileChooser fc = new FileChooser();

    File file = fc.showOpenDialog(null);
    String path = file.getAbsolutePath();
    System.out.println(path);
    path = path.replace("\\", "/");
    Media media = new Media(new File(path).toURI().toString());
    mediaPlayer = new MediaPlayer(media);
    mediaPlayer.setAutoPlay(true);
    MediaView mediaView = new MediaView(mediaPlayer);


    System.out.println(mediaPlayer.getStatus());

    GridPane grid = new GridPane();
    grid.setAlignment(Pos.CENTER);



    Button btn = new Button("press");

    btn.setOnAction(new EventHandler<ActionEvent>() {
        @Override 
        public void handle(ActionEvent e) {
            mediaPlayer.play();
            System.out.println(mediaPlayer.getStatus());
            System.out.println(mediaPlayer.getVolume());
            System.out.println(mediaPlayer.currentTimeProperty());
        }
    });
    grid.add(btn, 0,0);
    Scene scene = new Scene(grid, 300, 275);
    primaryStage.setScene(scene);
    primaryStage.setTitle("Audio Player 1");
    primaryStage.setWidth(200);
    primaryStage.setHeight(200);
    primaryStage.show();
  }
}

您选择一个文件,它将自动播放。您可以按一下按钮查看它是否正在播放以及歌曲的当前时间。这是我按错误文件上的按钮时的输出:

PLAYING
1.0
ReadOnlyObjectProperty [bean: javafx.scene.media.MediaPlayer@109dde8a, name: currentTime, value: 78.367345 ms]

当我尝试播放该文件时,每次按下该按钮都具有相同的输出。发生了什么事,我该如何解决?

0 个答案:

没有答案