2012-09-18 122 views

回答

2

现在我不能测试它,但我认为它应该工作:

public MediaView createMediaView(Collection<String> urls){ 
    MediaView mediaView = new MediaView(); 
    initMediaPlayer(mediaView, urls.iterator()); 
    return mediaView; 
} 

private void initMediaPlayer(
      final MediaView mediaView, 
      final Iterator<String> urls 
){ 
    if (urls.hasNext()){ 
     MediaPlayer mediaPlayer = new MediaPlayer(new Media(urls.next())); 
     mediaPlayer.setAutoPlay(true); 
     mediaPlayer.setOnEndOfMedia(new Runnable() { 
      @Override public void run() { 
       initMediaPlayer(mediaView, urls); 
      } 
     }); 
     mediaView.setMediaPlayer(mediaPlayer); 
    } 
} 
1

下面是从硬盘驱动器sample program which plays an AudioPlaylist

该程序的工作原理是为每个要播放的文件创建一个包含新MediaPlayer和新媒体的列表。在程序中有一个MediaView,对于每个MediaPlayer,在EndOfMedia上,MediaView的MediaPlayer被设置为列表中的下一个。这与jju的递归答案几乎相同。

注意,要更改正在播放的媒体,您不要更新MediaPlayer中的媒体(因为Media和MediaPlayer之间存在1:1对应关系,所以无法这样做),而是将Me​​diaPlayer更新为MediaView。

视频的概念与音频非常相似,因为JavaFX中的音频和视频都表示为MediaPlayer播放的媒体,并通过MediaView进行管理。