Java Reference
In-Depth Information
Man kann nun mehrfach auf den oberen Button mit der Beschri ung „Erhöhen“ klicken,
wodurch sich der Fensterinhalt wie erwartet ä ndert (s. Bild 11.2). Der entscheidende Punkt
kommt nun: Klickt man auf den Rücksetzen-Button des zweiten Applets, wird der Zähler
tatsächlich zurückgesetzt, und man sieht wieder den Zustand wie in Bild 11.1.
Bild 11.2 HTML-Seite nach mehrmaligem Klicken auf den Erhöhen-Button
Auf einige subtile Eigenheiten bezüglich des Klassenladens soll noch hingewiesen werden:
In diesem Beispiel wurde — nicht zufällig — für beide Applets dieselbe Zip-Datei als Archiv
angegeben. Dies bewirkt, dass für beide Applets dasselbe ClassLoader-Objekt benutzt wird,
was Sie durch Hinzufügen der folgenden Zeile in die beiden Initialisierungsmethoden der
Applet-Einstiegsklassen selber nachprüfen können:
System.out.println(getClass().getClassLoader());
Verwenden Sie dagegen unterschiedliche Archiv-Dateien, werden die Applets auch durch
unterschiedliche ClassLoader-Objekte geladen. Auch das wird Ihnen durch die obige Aus-
gabeanweisung in der Java-Console des Browsers angezeigt. Wegen der unterschiedlichen
ClassLoader-Objekte lassen sich die folgenden Eff ekte erklären:
! Wenn man zwei Zip-Dateien anlegt, applet1.zip für das erste Applet mit den Class-Dateien
für Counter und MainClass1 und applet2.zip für das zweite Applet mit MainClass2.class,
und diese jeweils als Archiv-Datei in den <applet>-Tags angibt, dann erzeugt die Initialisie-
rung des zweiten Applets die Ausnahme ClassNotFoundException für die Klasse javacomp.
applets.applet1.MainClass1. Im zweiten Applet hat man keinen Zugriff auf die Klassen
MainClass1 und Counter, weil diese durch ein anderes ClassLoader-Objekt geladen wurden
(diese Situation haben wir in Kapitel 6 vor der Einführung von „Uses:“ schon gesehen).
! Wenn man wieder von einer Zip-Datei mit allen drei Klassen ausgeht, diese Zip-Datei
kopiert, für das erste Applet als Archiv die Original-Zip-Datei und für das zweite Applet
als Archiv die Kopie der Zip-Datei angibt, dann sind die Zip-Dateien zwar gleich, es ist
aber nicht dieselbe Datei. Folglich werden auch in diesem Fall wieder zwei unterschied-
liche ClassLoader-Objekte für die beiden Applets benutzt. Beim Initialisieren des zweiten
Applets gibt es jetzt wieder die kuriose ClassCastException, weil javacomp.applets.
applet1.MainClass1 nicht zu javacomp.applets.applet1.MainClass1 gecastet werden kann
(auch dieser Fall begegnete uns schon in Kapitel 6).
 
Search WWH ::




Custom Search