Hallo,
Ich habe eine Frage zu den Klassen Timer und TimerTask und hoffe ihr könnt mir helfen.
Ich habe ein Java Programm geschrieben, das mit einer Liste von zu erledigenden Aufgaben gestartet wird. Es gibt also eine Taskliste über die iteriert wird (Collection) und für jeden eintrag wird ein Task gescheduled. Das sieht dann vereinfacht so aus:
Dann gibt es natürlich die Klasse Task, die sieht stark vereinfacht so aus:
Und jetzt zu dem Problem: Obwohl ich den TimerTask cancel, terminiert das Programm nicht, wenn es alle Aufgaben ausgeführt hat.
Ich habe es auch auf einem anderen Weg versucht. Anstatt den TimerTask in der run-Methode zu canceln, habe ich den Timer, der ich erzeugt habe, als Daemon initialisiert.
Also so: Timer timer = new Timer(true);
Dann terminiert das Programm zwar, aber die run-Methode wird auch nicht ausgeführt.
Jetzt bin ich auch mit meinem Latein am Ende. Hat jemand eine Lösung?
Viele Grüße.
Ich habe eine Frage zu den Klassen Timer und TimerTask und hoffe ihr könnt mir helfen.
Ich habe ein Java Programm geschrieben, das mit einer Liste von zu erledigenden Aufgaben gestartet wird. Es gibt also eine Taskliste über die iteriert wird (Collection) und für jeden eintrag wird ein Task gescheduled. Das sieht dann vereinfacht so aus:
Code:
public class Scheduler {
public static void main (String[] args) {
Tasklist tasklist = new Tasklist();
while (tasklist.hasNext()) {
Timer timer = new Timer();
timer.schedule (new Task(),date);
}
}
}
Dann gibt es natürlich die Klasse Task, die sieht stark vereinfacht so aus:
Code:
public class Task extends TimerTask {
public void run {
// hier werden verschiedene andere Klassen aufgerufen
// und Berechnungen durchgeführt
// wenn alles erledigt wird, soll der TimerTask gecancelt werden
this.cancel();
}
}
Und jetzt zu dem Problem: Obwohl ich den TimerTask cancel, terminiert das Programm nicht, wenn es alle Aufgaben ausgeführt hat.
Ich habe es auch auf einem anderen Weg versucht. Anstatt den TimerTask in der run-Methode zu canceln, habe ich den Timer, der ich erzeugt habe, als Daemon initialisiert.
Also so: Timer timer = new Timer(true);
Dann terminiert das Programm zwar, aber die run-Methode wird auch nicht ausgeführt.
Jetzt bin ich auch mit meinem Latein am Ende. Hat jemand eine Lösung?
Viele Grüße.