DarthShader
Erfahrenes Mitglied
Hallo,
ich habe ein kleines "Problem" bezüglich der GUI Programmierung in Swing sowie einem nebenläufigen Thread.
Das Szenario (hier etwas konstruiert) ist relativ einfach: Auf einem JFrame gibt es einen Button "Drucken". Wenn ich auf diesen Button klicke, so wird von einer sogenantnen PrintService Klasse die "print" Methode aufgerufen. Diese Methode startet einen neuen Thread, und druckt ein Dokument aus.
Nun möchte ich, dass, sobald der Benutzer auf "Drucken" geklickt hat, ein kleines Fenster erscheint, mit dem Hinweis, dass der Druck gerade in Gange sei. Sobald die "print" Methode des "PrintService" fertig ist (oder genauer: der Thread, der von der "print" Methode zum Drucken erzeugt wurde), so soll das Hinweisfenster wieder verschwinden.
Nun weiß ich, dass man per .wait() und .notify() oder seit Java 5 mit await() und signal() z.B. das Ende eines Thread signalisieren kann. Mein Problem ist nun, was mache ich in der GUI Methode, wenn der Benutzer auf "Drucken" geklickt hat. Ich kann ja den Thread nicht einfach mit .wait() anhalten, denn es handelt sich um den Event-Dispatch-Thread, das würde bedeuten, dass die GUI eingefroren ist.
Kann mir jemand sagen, wie man hier vorgeht? Ich möchte auf das Ende eines Thread innerhalb des EDT warten, dabei darf der EDT aber nicht einfrieren.
Ich würde mich über Eure Hilfe sehr freuen
Vielen Dank!
ich habe ein kleines "Problem" bezüglich der GUI Programmierung in Swing sowie einem nebenläufigen Thread.
Das Szenario (hier etwas konstruiert) ist relativ einfach: Auf einem JFrame gibt es einen Button "Drucken". Wenn ich auf diesen Button klicke, so wird von einer sogenantnen PrintService Klasse die "print" Methode aufgerufen. Diese Methode startet einen neuen Thread, und druckt ein Dokument aus.
Nun möchte ich, dass, sobald der Benutzer auf "Drucken" geklickt hat, ein kleines Fenster erscheint, mit dem Hinweis, dass der Druck gerade in Gange sei. Sobald die "print" Methode des "PrintService" fertig ist (oder genauer: der Thread, der von der "print" Methode zum Drucken erzeugt wurde), so soll das Hinweisfenster wieder verschwinden.
Nun weiß ich, dass man per .wait() und .notify() oder seit Java 5 mit await() und signal() z.B. das Ende eines Thread signalisieren kann. Mein Problem ist nun, was mache ich in der GUI Methode, wenn der Benutzer auf "Drucken" geklickt hat. Ich kann ja den Thread nicht einfach mit .wait() anhalten, denn es handelt sich um den Event-Dispatch-Thread, das würde bedeuten, dass die GUI eingefroren ist.
Kann mir jemand sagen, wie man hier vorgeht? Ich möchte auf das Ende eines Thread innerhalb des EDT warten, dabei darf der EDT aber nicht einfrieren.
Ich würde mich über Eure Hilfe sehr freuen
Vielen Dank!