Hallo zusammen,
ich schreibe gerade ein Programm, innerhalb dessen ich eine Serie von Bildern einladen und hintereinander anzeigen möchte, so dass eine Art Film entsteht.
Als Anzeigeelement nutze ich „DisplayJAI“. Einzelbilder laden und anzeigen funktioniert auch einwandfrei mit der Funktion:
displayImage() {
display.set(image);
this.pack();
}
Nun habe ich folgendes Problem:
Über einen Menüeintrag öffne ich einen Filechooser, über den mehrere Bilddateien auswählbar sind. Innerhalb des action-events der den Filechooser auswählt rufe ich nun für jedes Bild die Funktion displayImage auf (mit einer anschließenden kurzen Pause). Allerdings wird die Anzeige erst dann aktualisiert, wenn das Event verlassen wurde, so dass einfach nur das letzte Bild zu sehen ist.
Hier der Code in gekürzter Fassung:
...
action Performed(...) {
...
name = auswahl.getSelecedFiles()[i].toString(); //auswahl = Name des Filechoosers
img = JAI.create("fileload",name);
displayImage();
}
Wie kann ich die Anzeige nun für jedes Bild innerhalb des Events aktualisieren? Oder wie sieht eine „richtige“ Lösung für dieses Problem aus? 
Vielen Dank
Steffen
Moien
ich schreibe gerade ein Programm, innerhalb dessen ich eine
Serie von Bildern einladen und hintereinander anzeigen möchte,
so dass eine Art Film entsteht.
Der AWT-Thread wird dich hauen.
Als Anzeigeelement nutze ich „DisplayJAI“.
Kenn ich nicht…
Über einen Menüeintrag öffne ich einen Filechooser, über den
mehrere Bilddateien auswählbar sind. Innerhalb des
action-events der den Filechooser auswählt rufe ich nun für
jedes Bild die Funktion displayImage auf (mit einer
anschließenden kurzen Pause).
Und dann haut dich der AWT-Thred. Folgendes: Der Thread der die action-Methoden aufruft ist der gleiche Thread der auch das „Bild“ an windows/Linux/Mac/ … übergibt. Solange dieser Thread blockiert ist kann sich die Anzeige nicht ändern. D.h. man darf auf gar keinen Fall eine längere Operation in action/event-Methoden machen, weil die GUI dann nämlich erstmal steht. Man sollte einen neuen Thread starten und dem alles übertragen.
Weist du wie man neue Threads erzeugt ? (Übrigens haut dich der AWT-Thread dann gleich nochmal (AWT/swing ist nicht synchronized), aber das erzählich die ein ander Mal)
Wie kann ich die Anzeige nun für jedes Bild innerhalb des
Events aktualisieren?
Man kann an allen Schnittstellen vorbei auf das native Graphics-Object zugreifen. Aber das schreiht ganz gewaltig nach Ärger. Und solange dir kein guter Grund einfällt werd ich dir auch nicht verraten wie das geht.
cu
Hallo Steffen,
warum liest du die Bilder nicht zuerst ein und startest dann einen Thread, der die Bilder nach und nach mit einem JLabel anzeigt.
Gruß
Peter
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo,
danke für deine Hinweise. Als Thread funktionierts nun 
Gruß
Steffen