# java.lang.IllegalThreadStateException nicht zu verhindern!



## Guest (25. Mrz 2005)

Hallo, ich habe folgenden Code, der beim klicken eines Buttons ausgeführt wird:

```
if(thread1running=true) {
  	  				  	thread.stop();
  	  				  	thread1running=false;
  	  				  	try {
  	  				  	thread.join();
  	  				  	} catch (InterruptedException exc) {
  	  				  	System.out.println("InterruptedException");
  	  				  	}
  	  				  	thread.start();
                                                                                               }
```

Vorher habe ic anstatt thread.join(), thread.stop() probiert, aber das hat auch eine Exception ausgeworfen?
Woran liegt das denn? Ich muss doch in der run() Methode nicht extra irgendetwas zusätzliches einfügen um die join()-Methode auszuführen, wie bei interrupt(). Ich bin irgendwie am verzweifeln, weil ich den Thread einfach nicht stoppen kann oder auf ihn warten kann ohne die interrupted-methode...


----------



## Beni (25. Mrz 2005)

Thread.stop solltest du nicht einsetzen, da gibts einen riesigen Artikel in der API, was alles daran schlecht ist.

Wo genau tritt dieser Fehler auf? Doch nicht etwa bei Zeile 10: "thread.start"? Denn ein Thread lässt sich _nur einmal_ starten, danach ist er "verbraucht".


----------



## Guest (25. Mrz 2005)

Ja, tatsächlich in der 10. Zeile?
Der lässt sich wirklich nur ein mal starten?!
Dann muss ich ja jedes mal das gleich Thread Objekt nochmal erzeugen.
Das stand in meinem Buch gar nicht drin, das es nur einmal funktioniert. Ich denke, jetzt weiß ich woran es liegt, vielen Dank! (PS: und es gibt auch wirklich keine möglichkeit ihn nochmal zu starten?)


----------



## Beni (25. Mrz 2005)

Zitat aus der API:


> It is never legal to start a thread more than once. In particular, a thread may not be restarted once it has completed execution.



Somit: nein, es ist kein Neustart möglich.


----------



## Guest (25. Mrz 2005)

Aber mal eine Frage. 
Wenn der Button ausgeführt wird, prüfe ich ja, ob der Thread noch läuft. Sollte er das, dann mache ich einen neuen Thread(also starte ich ihn nochmal(ist ja der gleiche)). Aber wie kann ich prüfen was läuft, wenn ich es vorher nicht definiert hab? Die Definition kann ja erst kommen, nachdem ich geprüft habe, ob dieser thread noch läuft.
Muss ich mir einen Algorythmus ausdenken, oder gibts da ne Lösung?


----------

