# Applet beenden



## sirair (9. Jun 2006)

Hallo,

wie lautet denn der Code wenn man ein Applet über ein Button beenden will. Bei einer ganz normalen stand-alone Anwendung ist es zwar System.exit(), aber keine Ahnung bei Applets.

Danke


----------



## L-ectron-X (9. Jun 2006)

Applets können nicht einfach so beendet werden. Du kannst ein Applet beenden, in dem du entweder den Browser schließt (per Mausklick oder Menüaufruf) oder eine andere Seite lädst.


----------



## Leroy42 (9. Jun 2006)

Das bringt mich auf die Frage, ob es eigentlich
_erlaubt_ ist, die stop()- und destroy()-Methode
eines Applets _selbst_, also vom Applet aus, aufzurufen.  ???:L


----------



## L-ectron-X (9. Jun 2006)

Es ist erlaubt. Du kannst alle Methoden (bis auf die init()-Methode) des Applet-Lebenszyklusses innerhalb deines Applets aufrufen. Die init()-Methode würde allerdings neue Objekte erzeugen, auf die man keinen Zugriff mehr hat.
Es werden auch alle Methoden ausgeführt. Nur kann ein Applet eben nicht die VM beenden. Bei dem Versuch wird eine AccessControlException geworfen werden. Mach doch einfach mal einen Test.

```
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class TestApplet extends Applet implements ActionListener {
   private Button init, start, stop, destroy;
   
   public void init() {
      System.out.println("init()");
      
      setLayout(new GridLayout(2, 2));
      init = new Button("init()");
      init.addActionListener(this);
      add(init);
      
      start = new Button("start()");
      start.addActionListener(this);
      add(start);
      
      stop = new Button("stop()");
      stop.addActionListener(this);
      add(stop);
      
      destroy = new Button("destroy()");
      destroy.addActionListener(this);
      add(destroy);

      System.out.println("init() durchlaufen");
   }
   
   public void start() {
      System.out.println("start()");
   }
   
   public void stop() {
      System.out.println("stop()");
   }
   
   public void destroy() {
      System.out.println("destroy()");
   }
   
   public void actionPerformed(ActionEvent e) {
      Object source = e.getSource();
      if(source == init)
         init();
      else if(source == start)
         start();
      else if(source == stop)
         stop();
      else if(source == destroy)
         destroy();
   }
}
```


```
<html>
<head>
<title>TestApplet</title>
</head>
<body>
<applet code="TestApplet.class" width="400" height="300">
Bitte Java aktivieren!
</applet>
</body>
</html>
```


----------



## Leroy42 (9. Jun 2006)

L-ectron-X hat gesagt.:
			
		

> Nur kann ein Applet eben nicht die VM beenden.


Danke für die Mühe den Beispielcode zu schreiben, aber *genau das* ist
mir schon lange bekannt.

Meine Frage zielte eher darauf, ob ein Applet, daß von sich aus destroy(),
start() oder stop() aufruft, nicht dadurch den Browser _durcheinander bringt_;
der bekommt davon ja schließlich nichts mit. Und es aus diesem Grund
verboten/nicht empfohlen wird.


----------



## L-ectron-X (9. Jun 2006)

Das Applet ruft diese Methoden von sich aus niemals auf.
Die Applet-Methoden aus dem Lebenszyklus werden normalerweise ausschließlich vom Browser selbst aufgerufen.
Der Programmierer kann aber, wie du ja schon weißt, die Methoden auch selbst, wann es ihm beliebt aufrufen. Das interessiert den Browser nicht und bringt ihn auch nicht durcheinander.


----------

