播放 MediaPlayer 对象的 ArrayList

Playing an ArrayList of MediaPlayer objects

上下文:

我正在和一大群人一起为一个 uni 项目制作游戏,我想制作音乐 class,让人们可以在某个地方写 Music music = New Music("song1.mp3, song2.mp3, song3.mp3")music.play()否则它会按顺序永远播放这些歌曲。这些文件必须存储在一个特定的位置,我的代码目前负责处理这个问题。我希望它是这样的,这样其他人就可以很容易地将他们自己的音乐放入他们正在实施的游戏的任何区域的程序中(导师会喜欢我这样做)。

目前我的代码用

初始化
private ArrayList<MediaPlayer> playlist;

public Music(ArrayList<String> playlistStrings){
    playlist = new ArrayList<MediaPlayer>();
    for(int i = 0; i<playlistStrings.size(); i++){
        URL url = Music.class.getResource("../Music/" + playlistStrings.get(i));
        Media media = new Media(url.toString());
        MediaPlayer player = new MediaPlayer(media);
        playlist.add(player);
    }
    System.out.println(playlist);
}

tl;博士

我有一个 MediaPlayer 对象的 ArrayList,我想播放它们,并循环播放整个播放列表。我知道我应该在某个时候使用一个监听器……但我仍然很困惑,因为我想要一个监听器,但我也希望它处于某种循环中……有没有人在某个地方有这样的例子? 我已经看过了 https://gist.github.com/jewelsea/1446612 并提取他的播放列表代码,但它对我不起作用。 谢谢!

编辑:下面的代码可以播放曲目列表,但我不知道如何让整个列表无限期地重复。

public void play(){
    System.out.println(trackIndex);
    player = playlist.get(trackIndex); 
    player.play();
    player.setOnEndOfMedia(new Runnable() {
        @Override public void run() {
            System.out.println(trackIndex);
            player.stop(); 
            if(trackIndex == (playlist.size()-1)){
                trackIndex = 0;
            }
            trackIndex++;
            player = playlist.get(trackIndex);
            player.play();
        }
    });
}
  • 使用对方法的递归调用解决了这个问题..