Feld aktualisieren

Status
Nicht offen für weitere Antworten.

eric

Aktives Mitglied
Hallo Forum,
ich habe mal wieder das Problem, dass die Anzeige unter Swing nicht aktualisiert wird. Folgendes

  • 1. mein Controller ist der ActionListener eines JButton
    2. der Controller liest aus dem View einen Wert 'amount' aus
    3. entsprechend der Anzahl wird eine Schleife durchlaufen
    4. dabei wird eine Nachricht verschickt
    5. die aktuelle Durchlaufnummer soll in einem Feld angezeigt werden

Nun wird das Feld nicht aktualisiert :-(

Die actionPerformed sieht so aus:
Code:
int amount = this.view.getAmount();

for( int i=0; i<amount; i++ ){
   this.adapter.sendMessage();
   this.view.setCount( i );
}

und setCount so:
Code:
this.countField.setText( new Integer(count).toString() );
this.countField.repaint();

Warum wird auf repaint nicht reagiert? Muss ich die Schleife etwa doch in einen separaten Thread packen?

Grüße
 
erstmal ganz einfach anfangen,
ersetze
this.countField.setText( new Integer(count).toString() );

durch

this.countField.setText( new Integer(count).toString() );
System.out.println("dieser Code wurde tatsächlich ausgeführt");

kommt die Meldung in der Konsole?
als nächstes vielleicht noch den neuen und alten Text ausgeben (könnte ja der gleiche sein)


----

möglich sind natürlich auch beliebige andere, aus dem Code nicht ersichtliche Ursachen,

Thread halte ich pesönlich für unnötig, einfaches setText sollte klappen, nicht mal repaint nötig sein
 
eric hat gesagt.:
Warum wird auf repaint nicht reagiert? Muss ich die Schleife etwa doch in einen separaten Thread packen?
Wenn das Verschicken der Nachrichten so lange dauert, dass sich das Anzeigen in der GUI lohnt, dann muss es in jedem Fall in einen eigenen Thread.
 
@SlaterB: Das hab ich schon gecheckt. Die Logausgaben hab ich nur der Übersichtlichkeit wegen entfernt. 🙂

Ich habe so langsam das Gefühl, ich brauch doch einen Thread. In setCount befinde ich mich im Thread "AWT-EventQueue-0". Wenn ich mit Breakpoint den Thread anhalte, steht das gesamte ContentPane still/wird nicht neu gezeichnet. Ich mach´s mal per Thread
 
eric hat gesagt.:
@SlaterB: Das hab ich schon gecheckt. Die Logausgaben hab ich nur der Übersichtlichkeit wegen entfernt. 🙂
deine Übersichtlichkeit ist meine zusätzliche Arbeit 😉
aber wenn die Aktion länger dauert, den AWT-Thread lahmlegt, dann ist die Sache ja klar
 
Nee klar ist hier gar nix. :-(

Ich habe die ganze for-Schleife wie sie ist in einen Thread gepackt und das Problem ist immer noch nicht behoben
 
zeige den Thread-Code,

baue im Zweifel ein einfaches 100-Zeilen-Programm nach,
irrelevanter Code wie
this.adapter.sendMessage();
kannst du durch Thread.sleep(1000) oder ähnlich simulieren
 
Es geht 😀

Also die Schleife muss in den Thread und mit start den Thread losschicken (nicht mit run() 😉)

Danke für die Unterstützung
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben