我正在尝试从 JavaFX 媒体播放器中检索元数据。我创建了一个类,它将歌曲的所有元数据提取到字典中,然后将其添加到其他歌曲元数据的列表中。我一直在尝试在提取元数据时锁定此列表,但是每次我添加某种同步对象时,媒体播放器都会陷入循环。目前,这看起来像:
Media track = new Media(f.toURI().toString());
MediaPlayer mp = new MediaPlayer(track);
while(mp.getStatus() != Status.READY) {
// Wait until ready
try {
Thread.sleep(1000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(mp.getStatus().toString());
// Check for errors
if (mp.getError() != null) {
System.out.println(mp.getError());
try {
Thread.sleep(10000);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
// Construct dictionary and add it to this.db
Hashtable<String, String> entry = new Hashtable<String, String>();
for (String key : mp.getMedia().getMetadata().keySet()) {
entry.put(key, mp.getMedia().getMetadata().get(key).toString());
}
if (entry != null) {
entry.put("file_path", mp.getMedia().getSource());
db.add(entry);
System.out.println(getByIndex(0).toString());
}
状态打印总是打印 UNKNOWN,并且不会抛出任何错误。知道这里可能会发生什么吗?谢谢!
编辑-应该提到,我要播放的媒体是 MP3 文件,它们在我的代码的不同部分中工作(所以,编解码器不是问题)。