如何在javafx中获取元数据值?

如何在javafx中获取元数据值?,java,dictionary,javafx,metadata,Java,Dictionary,Javafx,Metadata,我想知道为什么下面的代码不起作用。我试图从文件元数据的值创建两个ArrayList。在本例中,.mp3文件 private Stage stage; private List<File> filelist; private Map<String, Object> map; private ArrayList<String> artist; private ArrayList<String> title; public void open(

我想知道为什么下面的代码不起作用。我试图从文件元数据的值创建两个
ArrayList
。在本例中,
.mp3
文件

private Stage stage;
private List<File> filelist;
private Map<String, Object> map;
private ArrayList<String> artist;
private ArrayList<String> title;    

public void open(){
    FileChooser chooser = new FileChooser();
    filelist = chooser.showOpenMultipleDialog(stage);
    for (int i = 0; i <= filelist.size(); i++){
        try {
            Media media = new Media(filelist.get(i).toURI().toURL().toString());
            map = media.getMetadata();
            title.add(map.get("title").toString());
            artist.add(map.get("artist").toString());
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }
}

public void test(){
    for (int i = 0; i <= filelist.size(); i++){
    System.out.println(filelist.get(i).getName());
    System.out.println(title.get(i));
    System.out.println(artist.get(i));
    }
}
私有阶段;
私有列表文件列表;
私人地图;
私人阵列艺术家;
私人ArrayList标题;
公开作废{
FileChooser chooser=新建FileChooser();
filelist=chooser.showOpenMultipleDialog(阶段);

对于(int i=0;我能描述一下它是如何工作的吗?你试过调试map对象或记录它的所有内容吗?编辑你的问题,并在打印列表和抛出错误消息的地方添加代码。似乎你只能通过使用侦听器检索数据。可能是一些延迟初始化?至少是我在3中找到的所有示例0秒google search不直接使用getMetadata()映射,而是向映射添加更改侦听器。@罗兰我意识到这一点,我的重点是试图理解为什么需要更改侦听器,以及为什么元数据不像常规hashmap那样工作。