大家好我尝试播放一首歌并使用java fx 2.1 api使用以下代码打印其元数据
Media media = new Media(UIandControls.class.getResource("/assets/testData/mom.mp3").toExternalForm());
MediaPlayer mediaPlayer = new MediaPlayer(media);
ObservableMap list=media.getMetadata();
System.out.print(list);
mediaPlayer.play();
由于某种原因,getMetadata()是空的可观察Map。
输出看起来像这样
{}
请帮帮我..谢谢。
答案 0 :(得分:0)
在检索元数据之前需要调用mediaPlayer.play()。
答案 1 :(得分:0)
起初我遇到了麻烦,但我发现用这个很有效。
mediaPlayer.getMedia().getMetadata().addListener(new MapChangeListener<String, Object>(){
@Override
public void onChanged(Change<? extends String, ?> change) {
if(change.wasAdded()){
if(change.getKey().equals("artist"))
setArtist(change.getValueAdded().toString());
else if(change.getKey().equals("title"))
setTitle(change.getValueAdded().toString());
else if(change.getKey().equals("year"))
setYear(change.getValueAdded().toString());
}
}
});
另外我读到初始化后媒体数据并不总是存在,因此调用mediaPlayer.setOnReady()
方法可以确保数据存在。
示例:
mediaPlayer.setOnReady(new Runnable(){
@Override
public void run() {
setTrackLength(mediaPlayer.getMedia().getDuration().toMinutes());
mediaPlayer.currentTimeProperty().addListener(progressChangeListener);
}
});