# Applet startet beim zweiten Aufruf nicht mehr?



## martin12 (6. Mrz 2006)

Hallo zusammen,

hab hier n Applet mit dem ich über die Html-Seite auf eine SPS-Steuerung zugreifen will. Dies funktioniert auch wenn ich die Seite das erste mal öffne. Die Seite frägt automatisch das Passwort ab, das in dem Ethernet-Controller hinterlegt ist. Wenn dies dann alles erledigt ist, kann ich auch auf meine SPS zugreifen und meine Variablen steuern/ändern.
In meiner Seite kann ich über ein "Inhaltsverzeichnis" zwischen mehreren Seiten wählen.
Wenn ich dann auf eine andere Seite gehe und dann wieder zurück auf die Seite wo das Applet gestartet ist oder war, dann hab ich keine Verbindung mehr. Ich kann also nicht mehr auf meine Steuerung zugreifen, auch wenn ich im Browser auf aktualisieren gehe, funktioniert nichts. Erst wenn ich den Browser wieder neu gestartet habe, geht´s wieder.
Oder muss in die start-, stop- oder destroy-Methode noch was eingefügt werden?

Ach ja, es geht doch bestimmt auch bei Java, daß ich die TextField´s mit einer bestimmten Reihenfolge belege, wenn ich mit der Tab-Taste wechseln möchte?! Vielleicht so wie in Html?

Wäre für Eure Hilfe sehr dankbar!

Hier noch ein Teil des Codes:

```
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
/**
 * Insert the type's description here.
 * Creation date: (03.02.2006 14:17:35)
 * @author: 
 */
public class Eingabe extends Applet implements KeyListener, MouseListener {
	private Button ivjButton1 = null;
	private de.siemens.simaticnet.itcp.api.CLTimer ivjCLTimer1 = null;
	private de.siemens.simaticnet.itcp.api.S7CP ivjCP343 = null;
	private de.siemens.simaticnet.itcp.api.S7Device ivjCPU315 = null;
	IvjEventHandler ivjEventHandler = new IvjEventHandler();
	private TextField ivjTextField11 = null;
	private TextField ivjTextField12 = null;
	private TextField ivjTextField13 = null;
	private TextField ivjTextField14 = null;
	private TextField ivjTextField16 = null;
	private TextField ivjTextField17 = null;
	private TextField ivjTextField110 = null;
	private TextField ivjTextField15 = null;
	private TextField ivjTextField18 = null;
	private TextField ivjTextField19 = null;
	private TextField ivjTextField21 = null;
	private TextField ivjTextField210 = null;
	private TextField ivjTextField22 = null;
	private TextField ivjTextField23 = null;
	private TextField ivjTextField24 = null;
	private TextField ivjTextField25 = null;
	private TextField ivjTextField26 = null;
	private TextField ivjTextField27 = null;
	private TextField ivjTextField28 = null;
	private TextField ivjTextField29 = null;
	private de.siemens.simaticnet.itcp.api.S7Variable ivjVar1 = null;
	private Label ivjLabel1 = null;
	private Label ivjLabel11 = null;
	private Label ivjLabel2 = null;
	private Label ivjLabel21 = null;
	private Label ivjLabel22 = null;
	private Label ivjLabel23 = null;
	private Label ivjLabel24 = null;
	private Label ivjLabel25 = null;
	private Label ivjLabel26 = null;
	private Label ivjLabel27 = null;
	private Label ivjLabel28 = null;
	private Label ivjLabel29 = null;
	private de.siemens.simaticnet.itcp.api.S7Variable ivjProgrammStop = null;

class IvjEventHandler implements java.awt.event.ActionListener, java.awt.event.MouseListener, java.beans.PropertyChangeListener {
		public void actionPerformed(java.awt.event.ActionEvent e) {
			if (e.getSource() == Eingabe.this.getCLTimer1()) 
				connEtoM1();
			if (e.getSource() == Eingabe.this.getButton1()) 
				connEtoC1(e);
		};
		public void mouseClicked(java.awt.event.MouseEvent e) {};
		public void mouseEntered(java.awt.event.MouseEvent e) {};
		public void mouseExited(java.awt.event.MouseEvent e) {};
		public void mousePressed(java.awt.event.MouseEvent e) {
			if (e.getSource() == Eingabe.this.getButton1()) 
				connEtoC3(e);
		};
		public void mouseReleased(java.awt.event.MouseEvent e) {
			if (e.getSource() == Eingabe.this.getButton1()) 
				connEtoC4(e);
		};
		public void propertyChange(java.beans.PropertyChangeEvent evt) {
			if (evt.getSource() == Eingabe.this.getCP343()) 
				connEtoM2(evt);
			if (evt.getSource() == Eingabe.this.getCPU315()) 
				connEtoM3(evt);
			if (evt.getSource() == Eingabe.this.getVar1()) 
				connEtoC2(evt);
			if (evt.getSource() == Eingabe.this.getCPU315()) 
				connEtoM4(evt);
		};
	};
}
```

Hier noch die start- und stop-Methode. Die destroy-Methode habe ich nicht im Applet eingebunden, hoffe daß das jetzt nicht der Fehler war!


```
public void start() {
	super.start();

public void stop() {
	super.stop();
```


Viele Grüße

Martin


----------



## L-ectron-X (7. Mrz 2006)

Dein Applet hat, soweit ich das erkennen kann, keine init()-Methode. In die init()-Methode kommt alles hinein, was beim Applet-Start ausgeführt werden muss, also Initialisierung aller Instanzvariablen. Die init()-Methode wird nur ein einizges Mal vom Browser aufgerufen.
In die start()-Methode kommt alles hinein, was zur Ausführung des Programmes wichtig ist. Die start()-Methode kann öfter vom Browser aufgerufen werden, immer dann, wenn dein Applet auf irgendeine Weise (z.B. scrollen) in den Anzeige-Bereich kommt und die Ausführung beginnen kann/soll.
Die stop()-Methode benötigt nur Inhalt, wenn du das Applet erneut starten willst, etwa nach dem Verlassen dieser und der Rückkehr von einer anderen Webseite, oder wenn dein Applet aus dem Anzeigebereich herausgescrollt wird.
Die destroy()-Methode benötigt nur Inhalt, wenn noch etwas getan werden soll, bevor der Browser geschlossen wird.

Die Implementierungen der Methoden aus dem Lebenszyklus eines Applets sind leer, daher machen auch die super-Aufrufe in deinen start()- und stop()-Methoden keinen Sinn.


----------



## martin12 (5. Apr 2006)

Hallo,

dank Dir für deine Antwort, hat bei mir diesmal leider etwas länger gedauert.

Ich hab das ganze Ding mit Visual Age for Java gemacht und komm mit dem Quelltext nicht so klar!
Das ganze Ding läuft, wie ja schon erwähnt, nur eben das Starten beim 2. Zugriff auf das Applet.

Hätte noch ne Frage zu den Textfields, beim Appletstart is immer eine "0" zu sehen. Ich kann doch bestimmt in der Start- oder Init-Methode etwas aufrufen, so das beim Appletstart der tatsächliche Wert gezeigt wird?

Wie kann ich auf eine Variable beim Verlassen des Applets zugreifen? So das beim Verlassen des Applets in die Variablen "Sollpositionstop" und "Automatikstop" jeweils erst eine "1" und anschließend eine "0" geschrieben wird, so als ob ich das über einen Button mache?

Das ganze soll jetzt nicht sein, daß Ihr meine "Hausaufgaben" macht, sondern ich komm einfach nicht weiter!


Ich wollte eigentlich den ganzen Quelltext posten, war wohl ein wenig zuviel.

Wenn mir jemand behilflich sein könnte, hätte ich die Java-Datei, die ich versenden könnte.


Wäre sehr froh, wenn mir jemend mit dem Quelltext helfen könnte! 

Viele Grüße

Martin


----------



## martin12 (12. Mai 2006)

Hallo Leute,

ich komm irgendwie net weiter mit dem Applet.

Ich hab in der start-Methode schon die init- und die initconnection-Methode aufgerufen - funktioniert nicht.

Ich hab in der init-Methode schon die start-Methode aufgerufen - funktioniert auch nicht.


Kann mir keiner weiterhelfen, was ich in den einzelnen Methoden (start oder init oder sonstiges) aufrufen muss, damit dieses Applet immer wieder neu startet?


Oder muss ich in der stop- bzw. destroy-Methode nur etwas einfügen?


Ein Lehrer von mir hat gemeint, dass es vom Browser her so gewollt ist, dass kann ich fast net glauben?!


Grüße

Martin


----------



## L-ectron-X (13. Mai 2006)

Das stimmt, der Browser ruft die Methoden des Applets auf. Zumindest die des Lebenszyklusses.
Wenn du gar nicht weiter kommst, schaue ich mir das mal an.


----------

