Я создал ArrayList
путей к медиафайлам, и я хочу получить подробную информацию о медиафайле, такую как название и информация об альбоме, в моем приложении JavaFX.Я хочу добавить эти детали в ObservableList
.Поэтому я создал итератор, который дает путь ко всем медиафайлам.Внутри цикла итератора я создал объект Media
.Чтобы получить информацию о мультимедиа из объекта Media
, я создал прослушиватель метаданных.Я получил медиа-информацию в лямбда-функции, но я не могу использовать их вне лямбда-функции.Если я добавлю информацию в ObservableList
внутри лямбда-функции прослушивателя событий, то из-за итерации метаданных будет вставлено много нулевых значений, и будет вставлена только одна полезная информация.
Вот мой код:
ObservableList<PlayListModel> playListData = FXCollections.observableArrayList();
Iterator<JMPPlayListItem> it = playList.getIterator();
while(it.hasNext()) {
listMedia = new Media(it.next().getPath());
PlayListModel playListItem = new PlayListModel();
listMedia.getMetadata().addListener((MapChangeListener.Change<? extends String, ? extends Object> c)-> {
if (c.wasAdded()) {
if ("artist".equals(c.getKey())) {
playListItem.setArtist(c.getValueAdded().toString());
} else if ("title".equals(c.getKey())) {
// It prints title of song
System.out.println(c.getValueAdded().toString());
playListItem.setTitle(c.getValueAdded().toString());
} else if ("album".equals(c.getKey())) {
playListItem.setAlbum(c.getValueAdded().toString());
}
}
});
// It print null
System.out.println(playListItem.getTitle());
playListData.add(playListItem);
}
System.out.println(c.getValueAdded().toString())
печатает название песни, но вне лямбда-функции System.out.println(playListItem.getTitle())
печатает ноль.Это означает, что playListItem
значения объекта не меняются.Я пытался сделать финал playListItem
, но это не помогло.Я также попытался инициализировать playListItem
объект и playListData.add(playListItem)
внутри лямбда-функции, но он вставляет заголовок со многими нулевыми значениями заголовка из-за итерации прослушивателя событий.
Я также тестировал с локальными переменными, но не смог получитьзначения вне слушателя лямбда-функции.