Hinweise zu Problemen
von Applets mit Netscape Unter Netscape Communicator 4.* laufen Applets, die
nicht von der EreignisAnwendung abgeleitet sind, die Maus oder Tastatur
benutzen leider nicht ordnungsgemäß. Der Netscape zugrundeliegende Javainterpreter ist
nicht in der Lage, Maus- und Tastatur-Ereignisse an den Bildschirm zu schicken, wenn ein
anderer Prozeß läuft. Maus- und Tastaurereignisse werden benötigt um im
Hintergrund Maus und Tastatur zu verwalten. Hier verhalten sich die Sun- und die
Microsoft-Interpreter (JAVA und appletviewer bzw. jview und Internet-Explorer)
problemloser. Um die Applets unter Netscape lauffähig zu machen, muß das eigentliche
Applet explizit in einem Thread laufen, dann kann die Ereignisbehnadlung für das Fenster
quasi parallel erfolgen. Nun ist es sicher unsinnig, diese Hintergrunddetails im
Unterricht zu erörtern. Grundsätzlich ergibt sich aus den
"Klimmzügen", die erforderlich sind um die Einstiegsbeispiele unter Netscape
lauffähig zu bekommen, die Frage, ob es überhaupt sinnvoll ist, Applets zu erstellen.
In jedem Falle sollte man pragmatisch vorgehen, Probleme unter Netscape nur andeuten
und eine Lösung "nach Schema" vorschlagen:
Schema 1:
- Die Klasse für das "Hauptprogramm" wird aus einer Klasse Basis (in StiftUndCo
enthalten) abgeleitet.
- Sie enthält eine parameterfreie Methode namens run, von der aus der
Ablauf gesteuert wird
- Die Klasse Programm ruft nur den Konstruktor der Hauptprogrammklasse auf.
Bezogen auf Rechteckprogramm5 ergibt sich folgende Lösung:
public class RechteckProgramm5 extends Basis
{ //Deklarationsteil
...
public void run() // ersetzt fuehreAus()
{
this.init();
this.zeichnen();
while (!maus.istGedrueckt()){;}
this.gibFrei();
}
}
public class Programm extends Applet
public static void main(String s)
{
RechteckProgramm5 rp5;
rp5 = new RechteckProgramm5();
/* rp5 ist ein Objekt der Klasse RechteckProgramm5 */
}
public void init()
{
RechteckProgramm5 rp5;
rp5 = new RechteckProgramm5();
/* rp5 ist ein Objekt der Klasse RechteckProgramm5 */
}
}
Die so entwickelten Applets laufen unter allen genannten Umgebungen!
Hintergrundinformation:
Die Klasse Basis stellt einen Thread zur Verfügung in dem die aus ihr abgeleiteten
Klassen laufen, das sorgt für die erforderliche Parallelität von Programm und
Ereignisbearbeitung Der Interpreter erwartet die Funktionalität eines Threads in einer
Methode run. Deshalb muß die Ablaufsteuerung in einer solchen untergebracht sein. In der
Klasse Applet wird run nicht aufgerufen, da das System diese Methode nach dem Start des
Threads von sich aus aktiviert.
Schema 2:
Die Startklasse für das Programm implementiert die Schnittstelle Runnable und startet
einen Thread. Die Startklasse wird über eine Schablone erzeugt:
public class StartXXX extends Applet implements
Runnable
{
XXXanwendung meinXXX;
Thread t; //für Netscape
public static void main(String[] s)
{
XXXanwendung meinXXX = new XXXanwendung();
meinXXX.führeAus();
}
public void init()
{
meinXXX= new XXXanwendung();
t=new Thread(this); //für
Netscape
}
public void run()
{
meinXXX.führeAus();
}
public void start()
{
if( meinXXX==null)
{
meinXXX= new
XXXanwendung();
}
if (t != null)//für Netscape
{
t.start();
}
}
public void stop()
{
if (t!=null)//für Netscape
{
t.stop();
}
if( meinXXX!=null)
{
meinXXX=null;
}
}
}
In diesem Fall ist eine Änderung der eigentlichen "Haupt"-Klasse nicht
erforderlich.
Die Beispielapplets sind nach diesem Verfahren erzeugt worden.
|