0
我想在JavaFX中製作一個MP3播放器,並且到目前爲止已經獲得它來加載歌曲並播放,但現在我想要將媒體對象的元數據顯示到一個tableview。我有一個充當模型類的歌類,在我的控制器類中,我有一個標籤,我正在測試以查看是否可以顯示元數據,但始終爲空。如何從媒體對象獲取元數據
package application;
import java.io.File;
import javafx.collections.MapChangeListener;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
public class Song {
private File file;
private String title;
private String artist;
private String album;
private Media music;
private MediaPlayer mp;
public Song(File file) {
music = new Media(file.toURI().toString());
mp = new MediaPlayer(music);
getMeta();
artist = (String) mp.getMedia().getMetadata().get("artist");
title = (String) music.getMetadata().get("title");
album = (String) music.getMetadata().get("album");
//artist = "test";
//album = "test";
//title = "test";
}
public void play() {
mp.play();
}
public void pause() {
mp.pause();
}
public void stop() {
mp.stop();
}
public String getTitle(){
return title;
}
public String getArtist(){
return artist;
}
public String getAlbum(){
return album;
}
}
在我的控制器類
// Event Listener on Button[#loadBtn].onAction
@FXML
public void loadFile(ActionEvent event) {
Node source = (Node) event.getSource();
Window theStage = source.getScene().getWindow();
//set fileChooser filter
FileChooser.ExtensionFilter extFilter = new FileChooser.ExtensionFilter("MP3 files", "*.mp3");
fileChooser.getExtensionFilters().add(extFilter);
fileChooser.setTitle("Select MP3 files");
//File file = fileChooser.showOpenDialog(theStage);
//mySong = new Song(file);
list = fileChooser.showOpenMultipleDialog(theStage);
if(list!=null){
for(File x: list) {
mySong = new Song(x);
}
}
label.setText(mySong.getTitle());
}
在最後一行,如果元數據被正確檢索,它始終是空我測試。我有標籤被設置爲最初說「測試」,所以我會知道它是否做出任何更改,它確實,但不是我想要的。
我想你的解決方案,它似乎仍無法正常工作,唯一的原因,我能想到的是,也許我的MP3文件沒有元數據? http://imgur.com/a/F4xQx 但它看起來像它 –
你可以嘗試'if(c.wasAdded()){System.out.println(c.getKey()+「:」+ c .getValueAdded())}'來查看是否有任何元數據被拾取。如果你有一個十六進制編輯器,你可以用它打開MP3文件,看看你是否可以在那裏看到[ID3標籤](https://en.wikipedia.org/wiki/ID3)。 –
好吧,它是拾取「歌曲」類中的元數據,但是當我運行 'code'System.out.println(「歌名:」+ mySong.getArtist());'code' 控制器類它輸出「歌曲標題:空」 它在輸出的歌曲類「藝術家:Foo Fighters 專輯:聖塞西莉亞EP 標題:聖塞西莉亞」 任何想法爲什麼get方法是給零值? –