# Applet Siemens



## sartori (11. Sep 2006)

HAllo zusammen!
Hab ein Problem. Hab ein Programm geschrieben, wenn ich es im Browser öffne dann geht es nicht. enn ich die Java Console öffne dann kommt folgende Fehlermeldung raus:
java.lang.NullPointerException
	at Seilbahn.init(Seilbahn.java:107)
	at sun.applet.AppletPanel.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

Das Programm:


```
/*Durch diese Anweisung werden alle Klassen, in deren Quelltext diese nweisung steht, einem Paket zugeordnet. package de.siemens.simaticnet.itcp.example;
Durch den Import eines Pakets oder einer Klasse werden alle Vereinbarungen sichtbar gemacht,
die von ihrer Zugriffsklasse her in anderen Paketen sichtbar sein dürfen.*/

import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;
import java.awt.Frame;
import java.awt.Panel;
import java.applet.Applet;

import de.siemens.simaticnet.itcp.api.*;
import de.siemens.simaticnet.itcp.gui.*;

/**
* Seilbahn.java
* 

Überschrift: Seilbahnsteuerung für die Benutzung der ITCP Beans.</p>
* 

Beschreibung: Graphische animierte Darstellung der Seilbahn mit der entsprechende Geschwindingkeit.</p>
* 

Copyright: Copyright (c) 2006</p>
*
* Gelesen wird : - DB1.DBW0   (Geschwindigkeit, Typ -> INT)
*
*
* Verwendete Komponenten:
* S7CP
* S7Device
* S7Variable
* CLTimer
* CLTextOut
* CLTextIn
* CLTacho
*
* @author ITCP–Team  / Altermatt & Sartori
* @version 1.0       / 2.3.4
*
*/
public class Seilbahn extends Applet implements PropertyChangeListener, ActionListener
{
  // Deklaration der benötigten Komponenten
  // Anfang Variablen
  private CLTextOut cLTextOut1 = null;
  private CLTimer cLTimer1 = null;
  private CLTacho cLTacho1 = null;
  private S7CP s7CP1 = null;
  private S7Device s7Device1 = null;
  private S7Variable s7Variable1 = null;
  private AnzeigePosition AnzeigePosition1 = null;
  private AnzeigeWind AnzeigeWind1 = null;
  private int posGondel1, posGondel2;

  // Ende Variablen

  public void init()
  {
    AnzeigePosition1 = new AnzeigePosition();
    setLayout(null);
    AnzeigePosition1.init();
    
    AnzeigeWind1 = new AnzeigeWind();
    setLayout(null);
    AnzeigeWind1.init();

    s7CP1 = new S7CP();                                                // Anlegen einer Instanz für das S7CP Bean. S7CP ist der Ethernet Zugangspunkt in die Station
    s7CP1.setHostString(new HostString ("147.87.112.170:80"));         // Zuweisen der IP–Adresse (IP–Adresse + Portnummer)

    s7Device1 = new S7Device();                                        // Anlegen einer Instanz für das S7Device Bean. Mit S7Device wird der Kommunikationspartner in der Station adressiert
    s7Device1.setSlot(2);                                              // Steckplatznummer 2 (CPU)
    
    s7Variable1 = new S7Variable();                                    // Anlegen einer Instanz für das S7Variable Bean. Das S7Variable Bean repräsentiert die Variable die gelesen oder geschrieben werden soll
    s7Variable1.setVariableName("s7Variable1");                        // Setzt den Namen der Komponente auf die angegebene Zeichenfolge (Geschw. Motor)
    s7Variable1.setS7Anypointer(                                       // Die Beschreibung der Variable erfolgt über einen S7 ANY–Pointer
    new S7Anypointer((int)5, (int)1, (int)132, (int)1, (int)0, (int)0));
    /*––––––––––––––––––––––––––––––––––––––––––––––––––––––––––––Bit Nummer 0 ..7*/
    /*–––––––––––––––––––––––––––––––––––––––––––––––––––Speicherbereichoffset (0)*/
    /*–––––––––––––––––––––––––––––––––––––––––––––DB Nummer (1)*/
    /*–––––––––––––––––––––––––––––––––––Speicherbereich 132 == DB*/
    /*–––––––––––––––––––––––––––Wiederholfaktor 1*/
    /*–––––––––––––––––––Datentyp 5 == INT*/

    cLTimer1 = new CLTimer();                                           // Anlegen einer Instanz für das CLTimer Bean. Das CLTimer Bean löst nach Ablauf der Zeit ein PropertyChangeEvent Ereignis aus. Über dieses Ereignis wird eine zyklische Datenaktualisierung realisiert.
    cLTimer1.setDelay(500);                                             // Mit der Methode setDelay() wird das Zeitintervall festgelegt. Zeitintervall in msec. 2000 == 2 sec.
    cLTimer1.addActionListener(this);                                   // Dem CLTimer wird ein ActionListener angehängt

    cLTextOut1 = new CLTextOut();                                       // Anlegen einer Instanz für das CLTextOut Bean. Über das CLTextOut Bean können elementare Variablen ausgegeben werden
    setLayout(null);
    cLTextOut1.setName("cLTextOut1");                                   // Setzt den Namen der Komponente auf die angegebene Zeichenfolge
    cLTextOut1.setBounds(0, 0, 200, 45);                                // Festlegen der Startposition und Größe der Komponente
    /*––––––––––––––––––––––––––––––Komponentenhöhe*/
    /*–––––––––––––––––––––––––Komponentenbreite*/
    /*––––––––––––––––––––––Startposition Y*/
    /*–––––––––––––––––––Startposition X*/
    cLTextOut1.setOutFieldSize(100);                                    // Festlegen der Größe des Ausgabefeldes
    cLTextOut1.setLabel("Geschwindigkeit:");                            // Setzt den Beschreibungstext auf die angegebene Zeichenfolge
    cLTextOut1.setUnit("m/s");                                          // Setzt den Dimensionstext auf die angegebene Zeichenfolge


    cLTacho1 = new CLTacho();                                           // Anlegen einer Instanz für das CLTacho Bean. Über das CLTacho Bean können elementare Variablen ausgegeben werden
    setLayout(null);
    cLTacho1.setName("cLTacho1");                                       // Setzt den Namen der Komponente auf die angegebene Zeichenfolge
    cLTacho1.setUnit("m/s");                                            // Setzt den Dimensionstext auf die angegebene Zeichenfolge
    cLTacho1.setHighBound(1.5);                                         // Setzt die obere Grenze von Skala
    cLTacho1.setLowBound(0);                                            // Setzt die untere Grenze von Skala
    cLTacho1.setOverFlowValue(1);                                       // Setzt die obere Grenze von "überlauf" => Rote Lampe leuchtet
    cLTacho1.setUnderFlowValue(-0.1);                                   // Setzt die untere Grenze von "überlauf" => Rote Lampe leuchtet

    posGondel1=((Integer)s7Variable1.getValue()).intValue();
    posGondel2=((Integer)s7Variable1.getValue()).intValue();

    add(AnzeigePosition1);
    AnzeigePosition1.setBounds(0,0,500,200);
    AnzeigePosition1.seillaenge(500);
    AnzeigePosition1.positionGondel(posGondel1, posGondel2);
    
    add(cLTextOut1, cLTextOut1.getName());                              // Einfügen der Komponente ins Applet
    cLTextOut1.setBounds(0,200,300,100);
    
    add(cLTacho1, cLTacho1.getName());                                  // Einfügen der Komponente ins Applet
    cLTacho1.setBounds(300,200,300,200);
    
    add(AnzeigeWind1);
    AnzeigeWind1.setBounds(0,400,500,200);
    


    /* Neben der Definition der Methoden, die beim Eintreten eines Ereignisses ausgeführt werden, muß sich ein Objekt bei der entsprechenden Ereignisquelle registrieren.
    Dies geschieht durch Aufruf der addXXXListener–Methode der Ereignisquelle, wobei »XXX« für den entsprechenden Ereignis–Typ steht.
    Die addXXXListener–Methoden erwarten alle einen Verweis auf das zugehörige Interface */
    s7CP1.addPropertyChangeListener(this);
    s7Device1.addPropertyChangeListener(this);
    s7Variable1.addPropertyChangeListener(this);
    s7Variable1.addPropertyChangeListener(cLTacho1);

  }

  /**
  * Wird nach der Initialisierung eines Applets ausgeführt.
  * Bei Browsern wird start() auch dann aufgerufen, wenn eine Seite,
  * auf der sich ein Applet befindet, zum wiederholten Male geladen wird.
  *
  * @see #init
  * @see #stop
  * @see #destroy
  */

  public void start()
    {
      super.start();
    }
    
  /**
  * Ein Aufruf erfolgt, wenn der Browser bzw. der Appletviewer zum Icon
  Beispiele
  93
  S7Beans / Applets Programmierhilfe
  Ausgabe 06/2003
  C79000–G8900–C180–01
  * verkleinert oder eine HTML–Seite mit eingebundenem Applet in
  * einem Browser verlassen wird.
  *
  * @see #init
  * @see #start
  * @see #destroy
  */

  public void stop()
    {
      super.stop();
    }
    
  /**
  * Wird immer aufgerufen, wenn das Applet zerstört wird.
  *
  * @see #init
  * @see #start
  * @see #stop
  */
  
  public void destroy()
    {
      super.destroy();                                                  // Mit dieser Methode werden alle S7Bean–Instanzen gelöscht und Threads verworfen.
      S7Api.terminate();                                                // Nach dem Aufruf dieser Methode muss eine Neuinitialisierung durchlaufen werden.
  }

  /**
  * Methode, um Ereignisse für die PropertyChangeListener Schnittstelle zu behandeln.
  *
  * @param evt PropertyChangeEvent
  */
  
  public void propertyChange(PropertyChangeEvent evt)
  {
    if (evt.getSource() == s7CP1)                                       // Abfragen ob Ereignis vom S7CP ausgelöst wurde
    {
    s7Device1.propertyChange(evt);                                      // Wenn JA --> Ereignis weiterleiten an die S7Device–Instanz
    }
    if (evt.getSource() == s7Device1)                                   // Abfragen ob Ereignis vom S7Device ausgelöst wurde
    {
      s7Variable1.propertyChange(evt);                                  // Wenn JA --> Ereignis weiterleiten an die S7Variable–Instanz
    }
    if (evt.getSource() == s7Variable1)                                 // Abfragen ob Ereignis vom S7Variable ausgelöst wurde
    {
      cLTextOut1.propertyChange(evt);                                   // Wenn JA --> Dann Ausgabewert an die CLTextOut Instanz übergeben
    }
  }
  /**
  * Methode, um Ereignisse für die ActionListener Schnittstelle zu behandeln.
  *
  * @param e java.awt.event.ActionEvent
  */
  public void actionPerformed(ActionEvent e)
  {
    if (e.getSource() == cLTimer1)                                      //Abfragen ob CLTimer ausgelöst hat. Wenn JA, dann Werte aus dem AG lesen.
    {
      s7Variable1.processGet();                                         // Der Anstoss zum Lesen erfolgt mittels der Methode processGet() vom S7Variable Bean. Sind die neuen Werte vorhanden, so löst das S7Variable Bean ein PropertyChangeEvent aus.
    }
  }
  // Ende Ereignisprozeduren


}
```

_L-ectron-X hat diesen Beitrag am 12.09.2006 um 0:30 Uhr editiert.
Code-Tags eingefügt._


----------



## AlArenal (11. Sep 2006)

Und wir sollen nun von Hand bis Zeile 107 zählen, um nachzuschauen?


----------



## sartori (11. Sep 2006)

dass ist dieser Satz:


posGondel1=((Integer)s7Variable1.getValue()).intValue();


----------



## Leroy42 (11. Sep 2006)

Da du dein s7Variable mit new() initialisierst, dürfte dessen getValue()-Methode null liefern


----------

