# While(true)-Schleife im JPanel



## Fränky (17. Nov 2006)

Hallo,

ich hab ein echt blödes Problem mit einem Applet. Also mein Programm als Applet läuft super.
Sobald ich es als JPanel benutze und in ein Applet einfüge läuft es nicht mehr.

Hab den Fehler auch schon ausfindig gemacht. Es scheint so, als ob eine endlose While()-Schleife
in einem Panel nicht zu funktionieren scheint. Das Programm hängt dann immer fest, während es als reines
Applet super funktioniert.

Kann mir einer sagen wieso das so ist und wie ich das beheben kann?

Mfg

Fränky


----------



## motschow (17. Nov 2006)

n bisschen code wär vielleicht nicht schlecht...


----------



## Fränky (17. Nov 2006)

zB das hier:

Eine Methode die im Panel steht:


```
while(true){
			System.out.println("Endlosschleife");
			try {
				Thread.sleep(20);
			} catch (InterruptedException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
```

Wenn ich jetzt im Applet add(panel) mache, dann hängt er in dieser Schleife.
Ich meine, er soll ja in der Schleife bleiben, aber er macht dann NUR noch die Schleife.

Endlosschleife
Endlosschleife
Endlosschleife
..

Auf andere Events reagiert das Programm überhaupt nicht mehr (wie zB meine KeyListener)
Wenn ich die gleiche Methode ins Applet packe, funktioniert es wunderbar.

Mfg

Fränky


----------



## Wildcard (17. Nov 2006)

Du blockierst den EventDispatcher Thread.
http://www.javalobby.org/eps/galbraith-swing-2/


----------



## Fränky (17. Nov 2006)

?

Wieso passiert das aber nur im Panel, nicht aber im Frame oder im Applet?
Die gleiche Schleife läuft im Frame ohne Probleme.

Wie bekomme ich das jetzt hin, ohne diesen ED-Thread zu blockieren?

Thx

Mfg

Fränky


----------



## Wildcard (17. Nov 2006)

Gut das du dir den Link nicht angesehen hast.
Du hättest ja was lernen können...  :roll:


----------



## Fränky (17. Nov 2006)

Hab ich, verstehe ich aber nicht wirklich. Habe Java erst seit ein paar Monaten.

Wär wirklich super, wenn mir das einer kurz und einfach an meinem Schleifen-Beispiel erklären würde.

Thx

Mfg

Fränky


----------



## Wildcard (17. Nov 2006)

Das hat nichts mit JPanel, JFrame oder sonst einer Komponente zu tun.
Alles was arbeitsintensiv ist (und eine Endlosschleife ist dahingehend wohl nicht zu überbieten) darf nicht in den EventDispatcher Thread.
Du musst einen neuen Thread starten.


----------



## Fränky (17. Nov 2006)

Super, jetzt funktioniert es 

Wie eine kleine Zeile doch so viel Unterschied machen kann.


```
new Thread(this).start();
```

im Panel hat den Erfolg gebracht.

Hab zwar immernoch nicht ganz verstanden wieso das Panel einen neuen Thread will und das Applet nicht,
aber Hauptsache es läuft erstmal.

Vielen Dank für die Hilfe

Mfg

Fränky


----------



## Wildcard (17. Nov 2006)

Fränky hat gesagt.:
			
		

> Hab zwar immernoch nicht ganz verstanden wieso das Panel einen neuen Thread will und das Applet nicht,
> aber Hauptsache es läuft erstmal.


Das stimmt ja auch nicht.

Pass übrigens auf das du aus einem neuen Thread weder direkt noch indirekt auf die GUI Einfluss nimmst.


----------

