我正在尝试恢复不同媒体文件的元数据,但是由于某种原因,我的方法不是按正确的顺序执行代码。元数据正确恢复,但返回值为 null ,因为该方法未按顺序执行。这是代码:
public String getMetadata(ObservableList<Media> mediaList, int track){
mediaList.get(track).getMetadata().addListener((MapChangeListener.Change<? extends String, ? extends Object> ch) -> {
System.out.println("1");
String key = ch.getKey();
Object value = ch.getValueAdded();
if (ch.wasAdded()) {
switch (key) {
case "title":
Ptitle = value.toString();
System.out.println("2"+Ptitle);
break;
case "artist":
Partist = value.toString();
System.out.println("3" + Partist);
break;
case "album":
Palbum = value.toString();
System.out.println("4" + Palbum);
break;
default:
break;
}
}
System.out.println("1" + Ptitle + " " + Partist + " " + Palbum);
});
System.out.println("2" + Ptitle + " " + Partist + " " + Palbum);
return Ptitle;
}
它正在执行此操作:
System.out.println("2" + Ptitle + " " + Partist + " " + Palbum);
return Ptitle;
在其他任何事情之前..
,这是返回的值。蓝色圆圈是返回的,红色的圆圈应该返回,但是由于一项任务在另一个任务之前无法正常工作。
这件代码
mediaList.get(track).getMetadata().addListener...
将是异步执行的,因此可能不会立即可用。这解释了为什么在其他任何内容之前执行该代码