gpt4 book ai didi

JavaFX 元数据

转载 作者:行者123 更新时间:2023-11-30 07:57:05 29 4
gpt4 key购买 nike

我尝试找出如何从媒体获取元数据有一段时间了,但到目前为止没有任何效果。我有类 Song,其中有 SimpleStringProperties,如标题、艺术家等。我尝试在类构造函数中为它们设置值:

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 Controller 中制作一首新歌曲:

Song song = new Song(path);
System.out.println(song.getTitle());
System.out.println(song.getArtist());

我在控制台中看到

null
null

我知道在 setOnReady() 方法中它可以正确显示标题和艺术家。我有一个使用 Platform.runLater() 的解决方案,但当有更多新歌曲时它无法正常工作。我读过一些关于 synchronized() 的内容,但我不知道如何使用它。我正在等待一些解决方案。预先感谢:)

最佳答案

您在调用处理程序之前(即在 MediaPlayer 准备就绪之前)调用 getTitle()getArtist()

据推测,您并不真的想将这些显示到系统控制台,而只是为了测试而这样做。尝试类似的事情

Label titleLabel = new Label();
Label artistLabel = new Label();
Song song = new Song(path);
titleLabel.textProperty().bind(song.titleProperty());
artistLabel.textProperty().bind(song.artistProperty());

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

关于JavaFX 元数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32523552/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com