Java Reference
In-Depth Information
fläche zur Verfügung steht, mit deren Hilfe Sie ein Programm, das nicht mehr reagiert,
stoppen können. Sie finden diese Programmversion auf der DVD im Ordner Arbeitsum-
gebung\Java\Programme\JavaUebung14 unter dem Namen Ampelsteuerung_1 .
Sie sollten jetzt erst einmal die while -Konstruktion um die Phasensteuerung auskom-
mentieren und überprüfen, wie sich das Programm verhält, wenn es die vier Phasen nur
einmalig durchlaufen soll. Auch hier verhält sich das Programm sonderbar. Es scheint
die einzelnen Phasen zu ignorieren und nur die sleep -Anweisungen auszuführen, um
dann irgendwann in die letzte Phase (Gelbphase) zu wechseln.
Auch für die überraschendsten Effekte gibt es eine Erklärung. Nicht umsonst hat sich
das letzte Kapitel sehr ausführlich mit dem Zeichnen und dem Neuzeichnen von Kom-
ponenten auseinandergesetzt. Sie erinnern sich, dass beim Zeichnen auf Komponenten
plötzlich Linien wieder verschwunden sind, weil sie in bestimmten Situationen einfach
wieder mit dem Standardaussehen der Komponente überzeichnet worden sind. Auch
die jetzigen Erscheinungen sind mit den Abläufen bei der Darstellung und Aktualisie-
rung der bildlichen Darstellungen zu erklären.
Wenn Sie die Schaltfläche der Checkbox betätigen, wird die Eigenschaft selected auf
true gesetzt. Auch wenn es in den meisten Fällen den Anschein hat, dass gleichzeitig
auch das Häkchen in der Darstellung gesetzt wird, so trifft das doch nicht zu. Die bildli-
che Darstellung wird erst beim nächsten Neuzeichnen aktualisiert. Und das kann deut-
lich später sein. Sie können auch versuchen, durch zusätzliche repaint -Aufrufe, die
Aktualisierung zu beschleunigen. Es wird in diesem Beispiel keine Verbesserung brin-
gen.
Auch repaint -Aufrufe dürfen Sie nur als Aufforderungen auffassen, die Komponente
bei nächster Gelegenheit neu zu zeichnen. Die Aktualisierung der Ampel nach dem
Aktivieren einer neuen Phase ist vorgemerkt, wird aber nicht sofort ausgeführt. Wir
können deshalb nicht davon ausgehen, dass die bildliche Darstellung schon vor dem
Erreichen der ersten sleep -Anweisung erfolgt ist. Das Anhalten des Threads erfolgt
sofort, wenn die Anweisung erreicht wird. Da die zu aktualisierenden Komponenten
aber Bestandteile des Threads sind, werden während der Wartezeit auch keine Vorgänge
wie das Neuzeichnen dieser Komponenten ausgeführt. Wir haben hier also eine Situa-
tion erzeugt, die besonders deutlich macht, dass die Aktualisierung von bildlichen Dar-
stellungen zeitlich versetzt erfolgt.
Die Erklärung für ein Phänomen zu finden ist zwar durchaus interessant, Abhilfe für das
Problem zu finden, ist aber sicher noch wichtiger. Java stellt für solche Fälle eine
Methode bereit, die ein Neuzeichnen unmittelbar auslöst.
public void paintImmediately(int x, int y, int b, int h);
Search WWH ::




Custom Search