Hallo Forum,
ich arbeite mich gerade in JavaFX ein und bastel zu diesem Zweck eine Anwendung, die mir alle Bilder eines Ordners wie in einem Filmstreifen nebeneinander anzeigt. Ich habe daher der Scene eine HBOx zugefügt und durchlaufe dann in einer Schleife für alle Bilddateien folgende Schritte:
- Erzeugen eines Image-Objekts durch Einlesen der Bilddatei mittels FileInputStream
- Erzeugen eines ImageView-Objekts und Einfügung des eingelesenen Bildes
- Erzeugen eines BorderPanes und Einfügung des ImageView-Objekts
- Einfügen des BorderPanes in die HBox
Es funktioniert, hat nur den Schönheitsfehler, dass die Bilder erst nach Abarbeiten der kompletten Schleife angezeigt werden, was je nach Anzahl der Bilder schonmal 1 bis 2 Minuten dauern kann. Schöner wäre, wenn nach jedem Schleifendurchlauf das aktuelle Bild angezeigt wird. Wenn ich mich richtig informiert habe, muss dazu ein separater Thread her. Also verlagere ich die Schleife in folgenden Task:
@Override
protected File call() throws Exception {
... // meine Schleife
}
};
und starte den Thread:
th.setDaemon(true);
th.start();
Es funktioniert bis auf die letzte Aktion der Schleife, in der die BorderPane in die HBOx eingefügt werden soll. Dieses passiert offensichtlich nicht (es wird allerings auch keine Exception geworfen). Nach Recherche habe ich herausgefunden, dass Änderungen am UI nur im Application-Thread erfolgen können, dann wird es wohl daran liegen, dass mein separater Thread die BorderPane nicht einfügen kann. Mir ist bisher aber nicht klar geworden, wie ich es anstellen muss, damit beide Threads quasi kommunizieren können und der Application-Thread das im “Task-Thread” erzeugte BorderPane-Objekt übernehmen und in die HBox einfügen kann. Hättet Ihr da einen Tip für mich?