package AstroUI; /** Interface zur Synchronisation mehrerer, auf einer HTML-Seite befindlicher Applets. Da jedes Applet beim Aufbau einer HTML-Seite in einem eigenen Thread gestartet wird, gibt es keine zuverlässige Reihenfolge der Verfügbarkeit. Wenn man beim Laden der Webseite innerhalb der <code>start()</code>-Methoden der Applets Queraufrufe in ein anderes Applet implementieren will, ist nicht sichergestellt, dass das gerufene Applet bereits verfügbar ist. <p> Mit einem Trick kann man aber doch das Gewünschte erreichen: Das rufende Applet implementiert das Interface <code>ILoadListener</code>, das aus der einzigen Methode {@link #onLoad(Object) onLoad} besteht. Wenn sich das rufende Applet in seiner <code>start()</code>-Methode mit Hilfe der <code>Applet.getAppletContext()</code> die Instanz des aufzurufenden Applets beschaffen und die gewünschte Methode erfolgreich ausführen konnte, markiert es sich diese Aufgabe als erledigt. Konnte die Instanz noch nicht beschafft werden, so kommt das Interface ILoadListener() wie folgt zum Tragen: Jedes Applet, das potentiell von anderen Applets gerufen wird, durchläuft in einer Schleife sämtliche Applet-Instanzen. Für diejenigen, die sich auf den Typ <code>ILoadListener</code> casten lassen, wird die Interface-Methode <code>onLoad(this)</code> ausgeführt. Ist also das aufzurufende Applet später fertig als das rufende, so erhält das rufende Applet durch die <code>onLoad</code>-Methode die Möglichkeit, nun die gewünschte Methode auszuführen. Es bekommt also, kurz gesagt, entweder in seiner eigenen <code>start()</code>-Methode, oder in der <code>onLoad()</code>-Methode die Möglichkeit, die Aktion auf dem gerufenen Applet auszuführen. <p> Die Applets {@link HoroApplet HoroApplet} und {@link HoroCompare HoroCompare} haben eine Schleife über die <code>ILoadListener()</code>-Applets der gleichen Seite in ihrer Startmethode implementiert. Sie sind also durch ein anderes Applet extern steuerbar. */ public interface ILoadListener { /** Wird von allen Instanzen von {@link HoroApplet HoroApplet} und {@link HoroCompare HoroCompare} beim Laden der Seite aufgerufen, um rufenden Applets zu ermöglichen, beim Laden der Seite garantiert auf das Applet zuugreifen zu können (siehe Dokumentation zur Klasse). */ public void onLoad(Object caller); }