Javafx元数据

时间:2015-09-11 12:28:40

标签: java javafx metadata media

我试图找出如何从媒体中获取元数据一段时间,但到目前为止没有任何作用。我有类Song,我有SimpleStringProperties,如title,artist等。我尝试在类构造函数中为它们设置值:

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()的内容,但我不知道如何使用它。我在等待一些解决方案。在此先感谢:)

1 个答案:

答案 0 :(得分:1)

在调用处理程序之前(即在getTitle()准备好之前),您正在调用getArtist()MediaPlayer

据推测,您并不是真的想将这些显示在系统控制台上,而只是为了进行测试。尝试像

这样的东西
Label titleLabel = new Label();
Label artistLabel = new Label();
Song song = new Song(path);
titleLabel.textProperty().bind(song.titleProperty());
artistLabel.textProperty().bind(song.artistProperty());

然后在UI中显示这些标签。当数据可用时,它们将自动更新。