Threads bekomme Thread nicht abgewürgt mit interrupted()

El_Lobo

Mitglied
Hi Leute,

mein Problem ist, dass ich den Thread t mit t.interrupt() nicht abgewürgt bekomme. Mit stop() kein Problem, aber diese Methode soll man ja nicht (mehr) verwenden.
Wenn ich das Programm laufen lasse, bekomme ich auf der Konsole wohl "Interrupt in sleep()" angezeigt, aber nicht das "Machen-Thread interrupted". D.h. der Thread läuft munter weiter, obwohl er eigentlich beendet sein sollte. Kann mir jemand einen Tipp geben, wie ich den Thread auf saubere Weise beenden kann? (Den Thread möchte ich gerne als innere Klasse aufsetzen). Code siehe unten...
Danke schonmal und besten Gruß

El Lobo

Java:
Thread t = new Thread(new Machen());
...
t.start();		// Thread starten mit JButton "Start"
...
t.interrupt();	// Thread stoppen mit JButton "Stop"
...

private class Machen extends Thread {    //Thread als innere Klasse
	
	@Override
	public void run() {
		while ( !isInterrupted() ){
			...
			try {
				Thread.sleep(100);
			} 
			catch ( InterruptedException e )
			  {
			   interrupt();
			   System.out.println( "Interrupt in sleep()" );
			  }
		}
		System.out.println("Machen-Thread interrupted");
	}
}
 
Probiere
Java:
Thread t = new Machen();
anstelle von
Java:
Thread t = new Thread(new Machen());
!
Machen ist doch schon ein Thread und kein Runnable! (wobei zweiteres besser wäre ;D)
 
Liegt daran, dass du einen 2. Thread erzeugst dem du den Ersten übergibst.
btw. heißt interrupt doch unterbrechen und nicht beenden. Zudem wäre es in dem Fall vielleicht sinnvoller, direkt aus der Schleife in die catch zu springen. Wäre zwar Programmsteuerung was nicht so gut ist, aber ich denke in dem Fall ist das kein Problem.
 

Neue Themen


Zurück
Oben