如何使用mediaplayer javafx防止多次播放?

时间:2016-11-17 18:30:12

标签: javafx

我的歌曲表现有问题。我有一个从filechooser加载的音轨列表,放在TableView中并存储在列表(播放器)中。通过getSelectionModel获取所选的音频文件并运行它,到目前为止一切顺利。如果你不停止我选择另一个音频文件并发送给你播放,声音叠加。如何停止执行上一个文件从而避免多重播放?

addFileAudio代码:

 Media media;
 final List<MediaPlayer> players = new ArrayList<>();
 String fileName;
 MediaPlayer mediaPlayer;
public void addFileAudio(ActionEvent event) {
            BasicFileAttributes attr = null;
        FileChooser fileChooser = new FileChooser();
        fileChooser.setTitle("Seleziona il file da caricare");
        fileChooser.getExtensionFilters().addAll(
                new ExtensionFilter("Audio Files","*.wav","*.mp3"));
        File selectedFile = fileChooser.showOpenDialog(new Stage());
        if (selectedFile != null) {

            media = new Media(new File(selectedFile.getAbsolutePath()).toURI().toString());
            mediaPlayer = new MediaPlayer(media);
            players.add(mediaPlayer);

            MediaView mediaView = new MediaView(mediaPlayer);
            mediaView.setMediaPlayer(mediaPlayer);

            Path pathFile = Paths.get(selectedFile.toURI());
            try {
                attr = Files.readAttributes(pathFile, BasicFileAttributes.class);
            } catch (IOException e) {
                Exception.showError(1);
            }
        }else{
                Exception.showWarning(0);
        }

        String fileName = selectedFile.getName();
        String data = attr.creationTime().toString().substring(0,10);
        Table1.getItems().add(new PopulateTable(Table1.getItems().size()+1, fileName, data));

      }

代码播放按钮:

    void play(ActionEvent event) { 
MediaPlayer player = players.get(Table1.getSelectionModel().getSelectedIndex()); Status status = player.getStatus(); 
if (status!= Status.PLAYING) { 
player.play();
 } else { 
MediaPlayer playerNext = players.get(Table1.getSelectionModel().getSelectedIndex()); player.stop(); playerNext.play(); }

1 个答案:

答案 0 :(得分:0)

也许是这样的:更新

@FXML private ListView lvPlaylist;


MediaPlayer player;
Media pick;

Status status = Status.STOPPED;

String pathToMP3One = "song1.mp3";
String pathToMP3Two = "song2.mp3";

HashMap<String, String> hashmap = new HashMap();

ObservableList<String> items =FXCollections.observableArrayList ();


@FXML
private void handleButtonAction(ActionEvent event) {

    switch(status)
    {
        case STOPPED:

            String fileToPlay = hashmap.get(lvPlaylist.getSelectionModel().getSelectedItem().toString());
            System.out.println(fileToPlay);
            pick = new Media(fileToPlay);
            player = new MediaPlayer(pick);
            player.play();
            status = Status.PLAYING;
            break;
        case PLAYING:
            player.stop();
            fileToPlay = hashmap.get(lvPlaylist.getSelectionModel().getSelectedItem().toString());
            pick = new Media(fileToPlay);
            player = new MediaPlayer(pick);
            player.play();
            status = Status.PLAYING;
            break;                
    }
}

@FXML
public void addFileAudio(ActionEvent event) {
    BasicFileAttributes attr = null;
    FileChooser fileChooser = new FileChooser();
    fileChooser.setTitle("Seleziona il file da caricare");
    fileChooser.getExtensionFilters().addAll(new ExtensionFilter("Audio Files","*.wav","*.mp3"));
    File selectedFile = fileChooser.showOpenDialog(new Stage());
    if (selectedFile != null) {
        Path pathFile = Paths.get(selectedFile.toURI());
        try {
            attr = Files.readAttributes(pathFile, BasicFileAttributes.class);
        } catch (IOException e) {
            System.out.println(e.toString());
        }
    }else{
        System.out.println("hello");
    }

    hashmap.put(selectedFile.getName(), selectedFile.toURI().toString());     
    System.out.println("File name: " + selectedFile.getName());
    lvPlaylist.getItems().add(selectedFile.getName());

  }
@Override
public void initialize(URL url, ResourceBundle rb) {
    // TODO
    lvPlaylist.setItems(items);

}  

这对我有用!