Hallo zusammen,
ich bräuchte Hilfe bei einem kleinen Problem mit den Media-Klassen aus der JavaFx-Version. Ich habe folgenden Code für einen Button:
und die dazugehörige Klasse MediaElement:
Ich möchte also lediglich eine beliebige Anzahl von beispielsweise mp3 Dateien laden und auf deren Metadaten zugreifen. Folgende Probleme habe ich bzw. Aspekte verstehe ich nicht:
ich bräuchte Hilfe bei einem kleinen Problem mit den Media-Klassen aus der JavaFx-Version. Ich habe folgenden Code für einen Button:
Java:
addbutton.setOnAction(new EventHandler<ActionEvent>() {
@Override public void handle(ActionEvent e) {
FileChooser fc = new FileChooser();
List<File> filelist = fc.showOpenMultipleDialog(primaryStage);
if (filelist != null) {
for (File file : filelist) {
Media m = new Media(file.toURI().toString());
MedienElement me = new MedienElement(m);
System.out.println(me.toString());
}
}
}
});
und die dazugehörige Klasse MediaElement:
Java:
public class MedienElement {
String artist;
Media song;
public MediaElement(Media m){
song = m;
MediaPlayer mp = new MediaPlayer(m);
mp.setOnReady(new Runnable() {
@Override
public void run() {
artist = (String)mp.getMedia().getMetadata().get("artist");
}
});
}
public String toString(){
return artist;
}
}
Ich möchte also lediglich eine beliebige Anzahl von beispielsweise mp3 Dateien laden und auf deren Metadaten zugreifen. Folgende Probleme habe ich bzw. Aspekte verstehe ich nicht:
- Warum brauche ich einen MediaPlayer, um die Metadaten meiner Media auszulesen? Die Metadaten müssten doch auch unabhängig vom Player bereits existieren!?
- Das eigentliche Problem liegt in der Zeile
Hier wird null ausgegeben, da der Thread, welcher beim setOnReady gestartet wird noch nicht fertig ist bzw. noch gar nicht gestartet wurde (?).. Also müsste ich es bewerkstelligen, dass ich bevor ich die Ausgabe tätige (bzw. insgesamt mit meinem MediaElement weiter arbeite), warte bis der setOnReady-Thread vollständig abgearbeitet wurde (mal davon ausgegangen, dass es beim Laden kein Fehler gibt und der Player wirklich in den Ready-Zustand gelangt). Hierfür fehlt mir jedoch jeglicher Ansatz..Java:
System.out.println(me.toString());