2012-07-29

validateTree()

Heute habe ich mal wieder einen Post aus der Kategorie unnötige Fehler. Das Ganze begann damit, dass der Auto-Updater von Java auf dem Rechner meiner Frau eine Version von Java 7 installiert hat. Moni benutzt gelegentlich mein Programm VasenBank. Und die wollte plötzlich nicht mehr starten. Das sind die Momente, in denen man sich verwundert am Kopf kratzt.
Zwinkerndes Smiley
Der Grund des Absturzes war nach dem Aktivieren des Loggings natürlich schnell gefunden.
Screenshot: Auszug aus Logdatei
Die VasenBank ruft die Methode validateTree() auf. Und deren Implementierungen unterscheiden sich zwischen Java 6 und 7 in einem wichtigen Punkt. In Java 7 lautet die erste Anweisung: checkTreeLock();.
Screenshot: die Methode checkTreeLock()
Man könnte nun natürlich auf Oracle schimpfen… Wenn die schon sonst nichts mehr an Swing verbessern, brauchen sie auch hier nicht mehr zu schrauben.
Zwinkerndes Smiley
Aber gut, erstens gehört die Klasse Container zum AWT. Und zweitens gibt es in der Doku zu Java 6 schon folgenden Hinweis: Synchronization should be provided by the method that calls this one. Der eigentliche Fehler liegt also im schlampigen Lesen der Doku. …also einer aus der Rubrik unnötig. …und wie beheben wir das Ganze nun?
synchronized(getTreeLock()) { validateTree(); }

No comments:

Post a Comment