1
我試圖找出如何從媒體中獲取元數據一段時間,但到目前爲止沒有任何工作。我上課宋凡我有這樣的標題SimpleStringProperties,藝術家等等。我嘗試在類的構造函數爲它們設置的值:Javafx元數據
private final SimpleStringProperty title;
private final SimpleStringProperty artist;
public Song(String path) {
this.song = new MediaPlayer(new Media(path));
this.artist = new SimpleStringProperty(this, "artist");
this.title = new SimpleStringProperty(this, "title");
this.song.setOnReady(() -> {
title.set(song.getMedia().getMetadata().get("title").toString());
artist.set(song.getMedia().getMetadata().get("artist").toString());
});
}
然後我試圖在一個FXML控制器一首新歌:
Song song = new Song(path);
System.out.println(song.getTitle());
System.out.println(song.getArtist());
,我看到控制檯
null
null
我知道,在setOnReady()
方法它顯示標題和藝術家正常。我有一個Platform.runLater()
的解決方案,但當有更多的新歌時它不能正常工作。我已閱讀了一些關於synchronized()
的內容,但我不知道如何使用它。我正在等待一些解決方案。在此先感謝:)
它的工作原理,謝謝!這正是我所期待的。 –
我還有一個問題。我想在添加新歌曲時檢查歌曲是否已經在播放列表中。我有一個'SimpleListProperty播放列表',我使用'contains()'方法。我已經在Song類中覆蓋了equals()和hashcode()方法,但是當比較標題,藝術家等歌曲字段時,它們似乎還沒有被初始化。它導致'contains()'方法不會返回它應該的內容。有沒有什麼辦法可以等到所有的字段都被初始化? –