S
sartori
Gast
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:
L-ectron-X hat diesen Beitrag am 12.09.2006 um 0:30 Uhr editiert.
Code-Tags eingefügt.
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:
Code:
/*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.