Hi,
ich habe meine eigene Runmethode geschrieben.
Sie soll eine Art Timer darstellen und deshalb von 10 auf 0 runterzählen und nach einer Sekunde halt immer repaint() aufrufen.
Fkt soweit auch wunderbar, aber da der Benutzer des Programms den Countdown manuell abbrechen kann, ist eine mir unklare Sache aufgetreten.
Der Thread schläft ja immer eine Sekunde, bevor er wieder alles neu zeichnet! Wenn der Benutzer den Thread jetzt anhält durch eine bestimmt Aktion (also die zeitBoo Variable auf false und ZeitAnzahl auf -1 gesetzt) und innerhalb von 1 Sekunde wieder den Thread startet durch eine andere Aktion, dann setzt er zwar den Timer auf 10, aber er wartet nicht mehr 1 Sekunde bis er auf 9 geht, sondern nur noch die Restmillisekunden die vom alten Thread übriggeblieben waren.
Zur Veranschaulichung hier der Code der RunMethode
Außerdem passiert es manchmal (sehr selten), dass er eine Sekunde nicht darstellt und beispielsweise gleich von 9 auf 7 springt.
Wie kann ich beide Probleme beheben? Vor allem möchte ich, dass wenn ich die Boolean Variable ZeitBoo auf true setze, er dann wirklich neu beginnt und von 10 auf 0 runterzählt und immer 1 Sekunde genau wartet.
ich habe meine eigene Runmethode geschrieben.
Sie soll eine Art Timer darstellen und deshalb von 10 auf 0 runterzählen und nach einer Sekunde halt immer repaint() aufrufen.
Fkt soweit auch wunderbar, aber da der Benutzer des Programms den Countdown manuell abbrechen kann, ist eine mir unklare Sache aufgetreten.
Der Thread schläft ja immer eine Sekunde, bevor er wieder alles neu zeichnet! Wenn der Benutzer den Thread jetzt anhält durch eine bestimmt Aktion (also die zeitBoo Variable auf false und ZeitAnzahl auf -1 gesetzt) und innerhalb von 1 Sekunde wieder den Thread startet durch eine andere Aktion, dann setzt er zwar den Timer auf 10, aber er wartet nicht mehr 1 Sekunde bis er auf 9 geht, sondern nur noch die Restmillisekunden die vom alten Thread übriggeblieben waren.
Zur Veranschaulichung hier der Code der RunMethode
Code:
public void run() {
while (true) {
if (ZeitBoo == true) {
try {
Zeit.sleep(1000);
} catch (InterruptedException e) {
//falls ein Fehler auftritt
}
repaint();
ZeitAnzahl--;
if (ZeitAnzahl == -1) {
Fertig();
}
}
}
}
Außerdem passiert es manchmal (sehr selten), dass er eine Sekunde nicht darstellt und beispielsweise gleich von 9 auf 7 springt.
Wie kann ich beide Probleme beheben? Vor allem möchte ich, dass wenn ich die Boolean Variable ZeitBoo auf true setze, er dann wirklich neu beginnt und von 10 auf 0 runterzählt und immer 1 Sekunde genau wartet.