我正在尝试恢复不同媒体文件的metaData,但由于某种原因,我的方法没有按照正确的顺序执行代码。metaData被正确恢复,但返回值为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;优先于其他任何东西。
这就是返回值。蓝色的圆圈是要返回的,红色的是应该返回的,但是由于一个任务是在执行另一个任务之前执行的,所以它不能正常工作。
发布于 2018-03-27 18:50:44
这段代码
mediaList.get(track).getMetadata().addListener...将异步执行,因此可能无法立即使用。这就解释了为什么这段代码比任何其他代码都要先执行。
https://stackoverflow.com/questions/49519523
复制相似问题