Applets mit Netscape 4.x

[Startseite]


Nach oben ]

Erste Anwendungen
Anwendungen als Applets
Probleme mit Applets
Applets mit Netscape 4.x
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:

  1. Die Klasse für das "Hauptprogramm" wird aus einer Klasse Basis (in StiftUndCo enthalten) abgeleitet.
  2. Sie enthält eine parameterfreie Methode namens run, von der aus der Ablauf gesteuert wird
  3. 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.

 

 

 


Seitenanfang

© Georg Dick