Laufend aktualisierte GUI-Ausgabe statt Konsole

Original geschrieben von Joghurt
Soweit klappt alles ganz gut. Nur einen Haken hat die Sache:

die Methode fireZaehlerAktualisieren() wird im Daten-Objekt der Weltklasse (mittlerweile Singleton) korrekt aufgerufen. Das hab ich per Ausgabe überprüft. Allerdings wird die GUI nur 1x geändert bzw. die Änderung sichtbar und zwar genau am Ende des Programms.

Code:
	public void fireZaehlerAktualisieren(){
		int zufallszahl = MatheFunktionen.zufallsInt(1,100);
		String string = ""+zufallszahl;
		this.setZaehler(string);
		System.out.println("fireZaehlerAktualisieren aufgerufen: "+ zufallszahl);
	}

Bei Problemen mit der Aktualisierung hilft oftmals ein repaint().
 
Joghurt hat gesagt.:
Soweit klappt alles ganz gut. Nur einen Haken hat die Sache:

die Methode fireZaehlerAktualisieren() wird im Daten-Objekt der Weltklasse (mittlerweile Singleton) korrekt aufgerufen. Das hab ich per Ausgabe überprüft. Allerdings wird die GUI nur 1x geändert bzw. die Änderung sichtbar und zwar genau am Ende des Programms.

Halli hallo,
das Problem, dass das GUI sich nicht aktualisiert liegt nicht selten daran, das man seine Berechnungen in den Thread gelegt hat, in dem das System seine GUI-Anforderungen (Events) verarbeitet. Ich weiß nicht wie es in Eclipse genannt wird und welche Routinen man da verwenden muß, aber in Swing gibt es da 2 Methoden

1) SwingUtilities.invokeLater(Runable);
2) SwingUtilities.invokeAndWait(Runable);

In anderen Worten, man lässt seine Berechnungen, so sie lange dauern, in einen extra Thread ablaufen und ruft daraus eine der obigen Routinen auf um damit das GUI zu verändern.
Dem zufolge sollten die Änderungen als Runable definiert werden.

Du mußt mal, falls Eclipse ähnliches bereithält, natürlich die equivalenten Routinen suchen/finden/anwenden.

In der Hoffnung der Tip hilft,

Takidoso
 
Hallo!

Schau dir doch mal die Methoden:
syncExec(Runnable runnable)
Causes the run() method of the runnable to be invoked by the user-interface thread at the next reasonable opportunity.

und

asyncExec(Runnable runnable)
Causes the run() method of the runnable to be invoked by the user-interface thread at the next reasonable opportunity.

der Klasse: org.eclipse.swt.widgets.Display

an.

Gruß Tom
 
Zurück