java.lang.IllegalThreadStateException nicht zu verhindern!

  • Themenstarter Themenstarter Guest
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
G

Guest

Gast
Hallo, ich habe folgenden Code, der beim klicken eines Buttons ausgeführt wird:
Code:
                                                                                             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...
 
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".
 
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?)
 
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.
 
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?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben