Timer Problem

javaneuling

Grünschnabel
Hallo

Ich sehe es wieder einmal gar nicht und probiere schon einige Zeit herum.

Ich erstelle einen Timer

java.util.Timer timer=new java.util.Timer();

Wenn ich ihn starte, soll es nach 5 Sekunden pipsen:

public class Task extends TimerTask{

@Override
public void run(){
Toolkit.getDefaultToolkit().beep();
}
}

Mit dem folgenden Befehl starte ich den Timer:

timer.schedule(new Task(),5000);

Das funktioniert auch. Wenn der Benutzer aber eine Taste drückt, bevor die 5 Sekunden vorbei sind, soll es nicht pipsen.

public void keypressed...

Hier möchte ich nun timer.cancel(); aufrufen, aber das geht nicht. Ich erhalte "Timer already cancelled".

Wie kann man das lösen? Scheint so simpel zu sein und geht doch nicht.

Danke

JavaNeuling
 
Schreibe eine Methode die sich für 5sec schlafen legt. Nachdem diese 5sec vorbei sind wird der beep ausgegeben.
 
Moin!
Deine Methode gibt gleich nach dem Starten den Beep aus. Davor gehöhrt noch ein Thread.sleep(5000L);

Nö, dafür ist ja der Timer zuständig, der das ganze erst nach 5 Sekunden aufruft.

Hier möchte ich nun timer.cancel(); aufrufen, aber das geht nicht. Ich erhalte "Timer already cancelled".
Der Aufruf funktioniert schon. Die cancel() Methode kannst du sooft aufrufen wie du willst.
Ich nehme aber an, du rufst die cancel() Methode auf und möchtest danach mit dem Timer erneut einen Task erstellen. Das klappt nicht.
Entweder erstellt du dir dann einen neuen Timer oder du cancelst den TimerTask und nicht den Timer...

*grüssle*
MeinerEiner
 
Danke für die rasche Antwort. Aber so simpel geht es nicht. Denn dann schläft das Programm 5 Sekunden lang und reagiert nicht auf den Tastendruck.
Javaneuling
 
Sicher dass die cancle() - Methode was bringt? Da in run() keine Schleife, kein gar nichts ist, läuft doch sowieso nix oder?
 
Erzeug doch einen zusätzlichen Thread und überschreibe nicht die standard run Methode. Dieser Thread läuft parallel zum Programm und kann es auch nicht ausbremsen.
 
Es geht hier nicht um Threads sondern um TimerTask, welche von einem Timer gestartet werden. Von daher würde ich gerne nochmal auf meinem vorherigen Post hinweisen, der wohl total untergegangen ist und bevor der arme javaneuling total verunsichert wird...
 
Zurück