首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javafx元数据

Javafx元数据
EN

Stack Overflow用户
提问于 2015-09-11 12:28:40
回答 1查看 784关注 0票数 1

一段时间以来,我一直试图了解如何从媒体中获取元数据,但到目前为止,没有任何东西起作用。我有类歌,其中有SimpleStringProperties,如标题、艺术家等。我试图在类构造函数中为它们设置值:

代码语言:javascript
复制
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控制器中做一首新歌:

代码语言:javascript
复制
Song song = new Song(path);
System.out.println(song.getTitle());
System.out.println(song.getArtist());

我在控制台上看到

代码语言:javascript
复制
null
null

我知道在setOnReady()方法中,它正确地显示了标题和艺术家。我已经有了一个Platform.runLater()的解决方案,但当有更多的新歌曲时,它并不能很好地工作。我读过一些关于synchronized()的文章,但我不知道如何使用它。我正在等待一些解决办法。(预先谢谢:)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-11 14:15:10

在调用处理程序之前(即在getTitle()准备就绪之前),您正在调用MediaPlayergetArtist()

想必,您并不想将这些显示到系统控制台上,而只是为了测试。试着做些像

代码语言:javascript
复制
Label titleLabel = new Label();
Label artistLabel = new Label();
Song song = new Song(path);
titleLabel.textProperty().bind(song.titleProperty());
artistLabel.textProperty().bind(song.artistProperty());

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32523552

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档