Hallo Forum,
ich habe ein Konsolenprogramm geschrieben, welches auch ueber eine GUI angesprochen werden soll. Das Programm macht seine Ausgaben ueber System.out.println();.
Um diese in der GUI sichtbar zu machen habe ich ein JTextArea weches die Ausgaben anzeigt. Dies geschieht ueber eine Klasse welche OutputStream so erweitert, dass die Methoden write() in die TextArea ausgeben. Das Ganze wird ueber
eingebunden.
Auf der GUI befindet sich eine Start-Schaltflaeche welche mit einer eigenen Instanz von ActionListener verbunden ist. Uber die Methode actionPerformed() wir dann die Verarbeitung gestartet.
Soweit ich das Modell bisher verstanden habe wird bei Klick auf den Button der Inhalt der Methode actionPerformed() in einem Event-dispatching-Thread ausgefuehrt.
In meinem Programm ist die Abfolge hier so:
1. Eingabefelder inaktiv schalten
2. Verabeitung starten (dauert ein paar Minuten, erstellt Ausgaben ueber println())
3. Eingabefelder wieder aktivieren
Was tatsaechlich passiert ist:
Klick auf den Start-Button
Button bleibt im Zustand (optisch) gedrueckt
Nach Ende wird die Ausgabe angezeigt
Mein Frage waere nun: Wieso wird die Ausgabe nicht auf der GUI angezeigt? Wieso werden die Eingabefelder nicht vor der Verarbeitung inaktiv geschaltet?
Ist es eventuell so, dass die Aenderungen des Event-dispatching-Threads erst sichtbar werden wenn dieser wieder an den Haupt-Thread uebergibt? Sprich, der Haupt-Thread welcher, so meine Vermutung, auch die GUI aktuell haelt muss auf das Ende des Event-dispatching-Threads warten?
Ueber ein paar Tipps wuerde ich mich freuen.
Gruss,
Markus
ich habe ein Konsolenprogramm geschrieben, welches auch ueber eine GUI angesprochen werden soll. Das Programm macht seine Ausgaben ueber System.out.println();.
Um diese in der GUI sichtbar zu machen habe ich ein JTextArea weches die Ausgaben anzeigt. Dies geschieht ueber eine Klasse welche OutputStream so erweitert, dass die Methoden write() in die TextArea ausgeben. Das Ganze wird ueber
Code:
System.setOut(new PrintWriter( new MyOutputStream(MyJTextArea), true));
Auf der GUI befindet sich eine Start-Schaltflaeche welche mit einer eigenen Instanz von ActionListener verbunden ist. Uber die Methode actionPerformed() wir dann die Verarbeitung gestartet.
Soweit ich das Modell bisher verstanden habe wird bei Klick auf den Button der Inhalt der Methode actionPerformed() in einem Event-dispatching-Thread ausgefuehrt.
In meinem Programm ist die Abfolge hier so:
1. Eingabefelder inaktiv schalten
2. Verabeitung starten (dauert ein paar Minuten, erstellt Ausgaben ueber println())
3. Eingabefelder wieder aktivieren
Was tatsaechlich passiert ist:
Klick auf den Start-Button
Button bleibt im Zustand (optisch) gedrueckt
Nach Ende wird die Ausgabe angezeigt
Mein Frage waere nun: Wieso wird die Ausgabe nicht auf der GUI angezeigt? Wieso werden die Eingabefelder nicht vor der Verarbeitung inaktiv geschaltet?
Ist es eventuell so, dass die Aenderungen des Event-dispatching-Threads erst sichtbar werden wenn dieser wieder an den Haupt-Thread uebergibt? Sprich, der Haupt-Thread welcher, so meine Vermutung, auch die GUI aktuell haelt muss auf das Ende des Event-dispatching-Threads warten?
Ueber ein paar Tipps wuerde ich mich freuen.
Gruss,
Markus