Я пытаюсь получить метаданные из песни.
Я создал класс с именем Song, в котором у меня есть базовый конструктор, множество получателей, таких как "getTitle ()" или "getArtist ()" и так далее ...
Чтобы получить эту информацию, мне нужно запустить метод applyProperties (). Этот метод просматривает все метаданные и помещает их в переменные экземпляра, но со своей скоростью и собственным потоком. И иногда, когда я вызываю метод получения, вывод просто нулевой, возможно потому, что он получает данные до того, как первый метод присвоит значения. Только я догадываюсь ...
Вот как это выглядит:
В этот момент переменные экземпляра уже должны были быть инициализированы строкой, чтобы я мог видеть информацию о файле песни. Но они не синхронизированы.
То, что я хочу, - это запустить applyProperties () и не допустить продолжения работы любого другого кода, пока он не завершит извлечение метаданных. Таким образом, я не рискую запустить геттер до того, как метаданные будут готовы.
Это класс Song:
public Song(String fileName, MapChangeListener mapChangeListener) {
// The path to the selected song
String path = new File("src/sample/media/" + fileName).getAbsolutePath();
// Adding the path to the media
media = new Media(new File(path).toURI().toString());
// media.getMetadata().addListener(mapChangeListener);
}
public Song (String fileName){
// The path to the selected song
String path = new File("src/sample/media/" + fileName).getAbsolutePath();
// Adding the path to the media
media = new Media(new File(path).toURI().toString());
}
public String getSongTitle() {
return songTitle;
}
public String getSongArtist() {
return songArtist;
}
public String getSongAlbum() {
return songAlbum;
}
public Media getMedia() {
return media;
}
public void applyProperties() {
System.out.println("Applying properties..");
ObservableMap<String,Object> meta_data=media.getMetadata();
meta_data.addListener(new MapChangeListener<String,Object>(){
@Override
public void onChanged(Change<? extends String, ? extends Object> ch) {
if(ch.wasAdded()){
String key=ch.getKey();
Object value=ch.getValueAdded();
switch(key){
case "album":
songAlbum = value.toString();
// System.out.println(value.toString());
break;
case "artist":
songArtist = value.toString();
// System.out.println(value.toString());
break;
case "title":
songTitle = value.toString();
// System.out.println(value.toString());
doneSearching=true;
break;
}
}
}
});
}