Thread.sleep() unterbrechen?

Asga

Mitglied
Hallo!

Ich möchte einen simplen Reaktionstest programmieren. Dazu benutze ich einen Thread, der mit einem Random-Generator alle 1,5 Sekunden (thread.sleep()) ein zufälliges Bild auf dem Bildschirm ausgibt. So weit so gut, das Ganze funktioniert auch. Weiterhin soll die Ausgangsdauer der Darstellung pro Symbol bei Nichtreaktion des Benutzers wie schon gesagt 1,5 Sekunden betragen.

Für jeden richtigen Befehl des Benutzers (Key-Event) soll die Darstellungsdauer um 0,1 Sekunden verringert werden. Bei einer falschen Eingabe soll die Dauer wieder auf 1,5 Sekunden gesetzt werden. An sich funktioniert das auch ganz gut.

Mein Problem ist jetzt nur: Wenn der Benutzer einen Tastatur-Befehl abgibt, egal ob richtig oder falsch, sollte sofort das nächste Symbol angezeigt werden. Das heißt ich würde gerne bei einem Key-Event die Methode thread.sleep() irgendwie unterbrechen und wieder in den Kopf der while-Schleife springen.

Ich habe schon alles mögliche durchprobiert, unter anderem die stop()-Methode, die interrupt()-Methode und andere, aber irgendwie finde ich nichts was mein Problem lösen könnte, bzw. nichts was den Thread nicht gleich komplett zerstört.

Code:
public void start()
	{
		thread = new Thread(this);
		thread.start();
	}
	
	public void run()
	{
		for(int i = 3; i >= 1; i--)
		{
			System.out.println("Start in: " + i);
			try
			{
				thread.sleep(1000);
			}
			catch(InterruptedException e)
			{
                                System.out.println("Error: " + e);
			}
			
		}
		long start = System.currentTimeMillis();
		Random randomGenerator = new Random();
		threadzeit = 1500;
		festgelegteZeit = 12000;

		while ((System.currentTimeMillis() - start) < festgelegteZeit)
		{
			int zufallsZahl = randomGenerator.nextInt(4);
			if (zufallsZahl == 0)
			{
				bilder.setIcon(getImage("1.jpg"));
				fenster.repaint();
				summeSymbole++;
				symbol = "1";
			}
			if (zufallsZahl == 1)
			{
				bilder.setIcon(getImage("2.jpg"));
				fenster.repaint();
				summeSymbole++;
				symbol = "2";
			}
			if (zufallsZahl == 2)
			{
				bilder.setIcon(getImage("3.jpg"));
				fenster.repaint();
				summeSymbole++;
				symbol = "3";
			}
			if (zufallsZahl == 3)
			{
				bilder.setIcon(getImage("4.jpg"));
				fenster.repaint();
				summeSymbole++;
				symbol = "4";
			}
			try
			{
				thread.sleep(threadzeit);
			} catch (InterruptedException e)
			{
				System.out.println("Error: " + e);
			}
		}

	}


	public void keyPressed(KeyEvent e)
	{
                String s = ""+ e.getKeyChar();
		if (s.equals(symbol))
		{
			symbolRichtig++;
			if(threadzeit > 500)
			{
				threadzeit = threadzeit - 100;

			}
		}
		else
		{
			symbolFalsch++;
			threadzeit = 1500;
		}

	}
 

Asga

Mitglied
Ich habe jetzt einfach die sleep Methode mit thread.interrupt() unterbrochen. Wenn interrupt() aufgerufen wird, schmeißt das System eine InterruptedException. Diese wird dann mit catch aufgefangen und ich arbeite im catch-block weiter.

Bestimmt keine schöne Lösung, aber es funktiniert so wie ich es mir vorstelle ^^
 

Lumaraf

Bekanntes Mitglied
Ich habe jetzt einfach die sleep Methode mit thread.interrupt() unterbrochen. Wenn interrupt() aufgerufen wird, schmeißt das System eine InterruptedException. Diese wird dann mit catch aufgefangen und ich arbeite im catch-block weiter.

Bestimmt keine schöne Lösung, aber es funktiniert so wie ich es mir vorstelle ^^

Besser wäre es meiner Meinung nach in diesem Fall mit wait+notify zu arbeiten. Speziell die Methode Object#wait(long) dürfte für dich interessant sein.

Galileo Computing :: Java ist auch eine Insel – 14.6 Synchronisation über Warten und Benachrichtigen
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Thread.sleep() Java Basics - Anfänger-Themen 5
B Threads Thread sleep() Method einfache Frage Java Basics - Anfänger-Themen 8
D Compiler-Fehler Wert auf Datenbank übertragen und Sleep Thread Java Basics - Anfänger-Themen 3
Spencer Reid JavaFX Memory Thread.sleep Java Basics - Anfänger-Themen 1
S Thread.sleep mit JProgressBar Java Basics - Anfänger-Themen 1
A Problem mit Thread.sleep Java Basics - Anfänger-Themen 4
M Thread.sleep() Funktion Java Basics - Anfänger-Themen 1
I Thread.sleep (1000); Java Basics - Anfänger-Themen 1
P Threads Thread.sleep() Java Basics - Anfänger-Themen 7
M Fehler bei Thread.sleep() Java Basics - Anfänger-Themen 5
B Thread.sleep() Java Basics - Anfänger-Themen 1
C Thread.sleep ratsam? Java Basics - Anfänger-Themen 6
L Thread.sleep Java Basics - Anfänger-Themen 6
G problem mit thread.sleep() Java Basics - Anfänger-Themen 6
M Threads Thread.Sleep Problem im Zusammenhang mit GUI/ActionPerformed-Methode Java Basics - Anfänger-Themen 4
T Thread Sleep() Java Basics - Anfänger-Themen 4
J Thread.sleep Java Basics - Anfänger-Themen 7
S Thread.sleep () - Frage Java Basics - Anfänger-Themen 16
M Frage zur Methode Thread.sleep() Java Basics - Anfänger-Themen 6
O Memory Thread.sleep() Java Basics - Anfänger-Themen 5
G Problem mit Thread Sleep! Java Basics - Anfänger-Themen 3
S Thread.sleep i.V.m Button.setText() Java Basics - Anfänger-Themen 8
G Schleife mit Thread.sleep pausieren Java Basics - Anfänger-Themen 12
R Thread - sleep - interrupt Java Basics - Anfänger-Themen 18
M Thread.sleep(20) dauert 31ms ? Java Basics - Anfänger-Themen 7
E Anfänger Problem mit Thread.sleep() Java Basics - Anfänger-Themen 11
S Thread.sleep Java Basics - Anfänger-Themen 6
V Alternative zu Thread.sleep() ? Java Basics - Anfänger-Themen 6
S Runtime.exec -> Thread.sleep -> Konflikt Java Basics - Anfänger-Themen 7
A Thread.sleep Java Basics - Anfänger-Themen 9
Leyla Thread isInterrupt Java Basics - Anfänger-Themen 18
P Meldung aus Java-Klasse in Thread an aufrufende Klasse Java Basics - Anfänger-Themen 1
A Thread XML-Dateien zusammenfügen Java Basics - Anfänger-Themen 11
F influxdb Upload in eigenem Thread Java Basics - Anfänger-Themen 2
frager2345 Thread - Methoden synchronized deklarieren Java Basics - Anfänger-Themen 10
berserkerdq2 Größter unterschied von extends thread und implements runnable? Java Basics - Anfänger-Themen 2
T Thread beenden aus zweiter Klasse Java Basics - Anfänger-Themen 4
A Thread - Synchronized Java Basics - Anfänger-Themen 10
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
A Thread-Semhapore Java Basics - Anfänger-Themen 0
A Thread Exchanger Java Basics - Anfänger-Themen 22
A Thread-Cyclicbarrier Java Basics - Anfänger-Themen 4
B In einem Thread Endlosschleife beenden Java Basics - Anfänger-Themen 19
A Thread-Verklemmung Java Basics - Anfänger-Themen 10
A Thread-Schreibe-Lese-Problem Java Basics - Anfänger-Themen 4
A Thread find number Java Basics - Anfänger-Themen 8
F Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 11 at main.main(main.java:11) Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 3
M Exception in thread "main" java.util.NoSuchElementException Java Basics - Anfänger-Themen 2
A Thread Java Basics - Anfänger-Themen 8
B Compiler-Fehler Fehlermeldung Exception in thread, falsche Eingabewert Java Basics - Anfänger-Themen 2
M Thread-Zustände Java Basics - Anfänger-Themen 6
CptK For-Schleife in Thread nach jedem Durchlauf pausieren Java Basics - Anfänger-Themen 35
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
B Endlosschleife Thread sauber beenden Java Basics - Anfänger-Themen 19
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 1
D Java Thread wartet nur ein mal Java Basics - Anfänger-Themen 0
O Exception in thread "main" java.lang.ArithmeticException: / by zero Java Basics - Anfänger-Themen 4
C Thread und TimerTask, Verstädnisproblem Java Basics - Anfänger-Themen 10
amgadalghabra Sorting Thread Launcher Java Basics - Anfänger-Themen 3
B Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException Java Basics - Anfänger-Themen 8
A Thread Java Basics - Anfänger-Themen 4
A Thread Java Basics - Anfänger-Themen 1
A Thread Java Basics - Anfänger-Themen 0
R Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 5
S Compiler-Fehler Exception in thread "main" java.lang.Error: Unresolved compilation problem: Java Basics - Anfänger-Themen 6
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 1
B Thread / Prozess stoppen? Java Basics - Anfänger-Themen 22
I Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5 Java Basics - Anfänger-Themen 3
W Thread Aufgabe - Vorgehensweise Java Basics - Anfänger-Themen 8
L Liste in anderem Thread laden Java Basics - Anfänger-Themen 0
J Threads PrograssBar update während thread Java Basics - Anfänger-Themen 13
ralfb1105 Frage zu Thread Synchronisation mit wait() und notify() Java Basics - Anfänger-Themen 3
R Exception in thread "main" java.lang.NullPointerException Java Basics - Anfänger-Themen 10
J JavaFX -> SocketIO -> Thread -> Update Label Java Basics - Anfänger-Themen 13
J Thread Handling Java Basics - Anfänger-Themen 9
C Thread in Methode + raus aus der Schleife Java Basics - Anfänger-Themen 10
E Threads Thread in While-Schleife nur einmal starten Java Basics - Anfänger-Themen 2
F Daten von Thread an den aufrufenden zurückgeben Java Basics - Anfänger-Themen 22
C Compiler-Fehler Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 2 Java Basics - Anfänger-Themen 3
B Thread Problem Java Basics - Anfänger-Themen 7
N KeyListener in Thread Java Basics - Anfänger-Themen 0
W JLabel in Main aus Thread verändern. Java Basics - Anfänger-Themen 4
D Ausgeben welcher Thread gerade Arbeitet Java Basics - Anfänger-Themen 8
N Threads Thread-Fehler Java Basics - Anfänger-Themen 2
F Thread um Uhrzeit ausführen Java Basics - Anfänger-Themen 5
F Get/Post als eigener Thread mit Rückgabe Java Basics - Anfänger-Themen 5
J Exception in thread "main" Java Basics - Anfänger-Themen 1
F Thread der auf eine Queue wartet, sicher beenden Java Basics - Anfänger-Themen 4
B Animation mit Thread(s) Java Basics - Anfänger-Themen 23
M Threads Jede Klasse einem Thread zuweisen Java Basics - Anfänger-Themen 7
J Java Thread cancel() und wiederbeleben Java Basics - Anfänger-Themen 4
J BouncingBalls 1 Thread Java Basics - Anfänger-Themen 3
L Fehler: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException Java Basics - Anfänger-Themen 4
J Timer oder Thread programmieren ? Java Basics - Anfänger-Themen 10
fLooojava Laufender Thread | Boolean ändern Java Basics - Anfänger-Themen 9
T Thread Pool mit Work Stealing Java Basics - Anfänger-Themen 1
R Java Thread Java Basics - Anfänger-Themen 10
J Welche Methoden laufen im neuen thread ?? Java Basics - Anfänger-Themen 9
S Java memory fehler: Exception in thread "AWT-EventQueue-0" java.lang.OutOfMemoryError: Java heap spa Java Basics - Anfänger-Themen 5

Ähnliche Java Themen

Neue Themen


Oben