beenden Timer/TimerTask

MScalli

Erfahrenes Mitglied
Hi leutz.
Ich habe eine Methode geschrieben die 2 Buttons zum weiter verarbeiten einer Datei enabled(true) setzten soll.
Um sicher zu stellen das die Datei besteht und auch fertig erstellt ist habe ich einen Timer eingebaut der 20 Sekunden lang jede Sekunde schaut ob die datei erstellt wurde UND Ihre grösse gleich bleibt(wenn ihr ne andere Idee habt dann immer raus damit).
Alles soweit so gut.
Nur wenn das dann gegeben ist möchte ich den Timer beenden..
In den Zeilen wo return; steht sollte der Timer einfach "ausgeschaltet" werden.

Kann mir wer erklären wie ich das hin bekomme!

Thx im vorraus

Gruss
MScalli

Hier mein code
Code:
	private void setButtonsEnabledWhenDocumentIsCreated() {

		Timer timer = new Timer();
        TimerTask task = new TimerTask() {
        	
        	int zaehler = 0;
        	long vergleich = -1;
        	
            public void run() {
            	
            	if(zaehler < 20){
            		
            		System.err.println("** " + zaehler + " **");
            		
            		//Existiert das File schon?
            		if(MyFile.fileExists(path_temp_document)){
            			
            			//Die grösse stimmt überein - die Datei müsste fertig erstellt sein
            			//vergleich ist auf -1 damit auf jeden fall die File-länge 1 mal nach vergleich gespeichert wird
            			if(vergleich == new File(path_temp_document).length()){

            				//jetzt können die Daten weiter verarbeitet werden(Datei ist fertig erstellt!)
                			btn_ok.setEnabled(true);
                			btn_pdf.setEnabled(true);
                			
                			return; //hier sollte der Timer beendet werden  aber wie
            			} else {
            				System.out.println("file ist nicht gleich lang");
                			vergleich = new File(path_temp_document).length(); 
            			}
            		}
            		zaehler++;
            	} else {
            		return;//hier sollte der Timer beendet werden  aber wie
            	}
            };                
        };
       
        timer.schedule(task,1000,1000);    //führt den Thread in einer sec und dann jede sec aus
		
	}
 
Hallo twagi,

ui, das interessiert mich auch sehr!

Ich habe hier in den letzten Wochen auch einige Timer für bestimmte Zwecke eingebaut und diese an div. Stellen dann in Abhängigkeit unterschiedlicher Zustände gestoppt resp. gestartet.

Dabei fiel mir auch schon auf, dass das Stoppen den aktuellen Timerlauf nicht wirklich abbricht, sondern lediglich den nächsten Durchlauf in der Event-Queue unterbindet.

Wollte jetzt gerade mal mit dem von Dir angegebene "cancel" experimentieren, allerdings ist bei mir der Befehl unbekannt.
Ich arbeite mit dem JBuilder2007 + JDK 1.5.

Gibt es den Befehl erst in noch höheren Versionen?

Kann ich damit auch den aktuellen Timerdurchlauf von außen abbrechen?

Danke und Gruß
Klaus
 
Hallo vfl_freak,

also die Funktion ist seit Version 1.3 enthalten.

Es ist so, dass der Timer nach dem Aufruf von cancel() weder Tasks startet noch annimmt, allerdings laufen bereits gestartete Tasks noch durch.

Es gibt ja mehrere Timer-Klassen in Java, verwendest Du auch java.util.Timer ?

Gruß Twagi
 
Hallo twagi,

ah, stimmt - ich verwende ""javax.swing.timer" - und da gibt es keine CANCEL .... :-(

Na, ok, trotzdem Danke ;)

Gruß
Klaus
 
Zurück