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.
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;
}
}