On Fri, 19 Apr 2013 18:28:36 +0200, Dirk Schwidde wrote:
> On Fri, 19 Apr 2013 18:02:04 +0200, Joerg Meier <
joerg...@arcor.de>
> wrote:
>>On Fri, 19 Apr 2013 17:50:31 +0200, Dirk Schwidde wrote:
>>> Es müssten doch zuvor die Zahlen 1 bis 9 für jeweils 1000
>>> Millisekunden im Textfeld sichtbar sein, oder nicht?
>>Nein. Du gibst Swing ja keine Zeit, irgendwas neu darzustellen. Swing kommt
>>ja erst wieder zum malen, wenn Dein Loop beendet ist.
> Ja, danke - hab's jetzt verstanden.
> In
http://www.java-forum.org fand ich auch noch diese Aussage:
> der ActionListener muss umgehend beendet werden,
> erst dann wird die GUI wieder gezeichnet
Richtig: ActionListener laufen auf dem Swing EDT, die duerfen also nichts
blockieren oder lange rumeiern. Fuer Faelle wie Deinem also von dem
ActionListener aus einen SwingWorker (oder aehnliches, fuer Threads gibts
ja diverse Optionen) starten, und da dann den Loop laufen lassen.
Aber vorsicht: von anderen Threads aus darfst Du nicht direkt Deine
Swing-Komponenten anfassen. Das mag zwar beim testen gutgehen, fuehrt aber
langfristig zu Problemen. Ersetze also:
txtAusgabe.setText("" + j);
mit (aus dem Gedaechtniss, ich hoffe die Klammern etc. sind jetzt alle
richtig):
SwingUtilities.invokeLater(new Runnable() {
@Override
public void run() {
txtAusgabe.setText("" + j);
}
});
Ja, ganz schoen haesslich, fuehrt aber kein Weg drumrum, wenn Du es richtig
machen willst.