元数据恢复Java



我正在尝试恢复不同媒体文件的元数据,但是由于某种原因,我的方法不是按正确的顺序执行代码。元数据正确恢复,但返回值为 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...

将是异步执行的,因此可能不会立即可用。这解释了为什么在其他任何内容之前执行该代码

最新更新