Guten Tag
Ich habe einen SwingWorker den ich mit einem Button auf der GUI stoppen möchte.
In der Methode doInBackground, habe ich eine Berechnungsschlaufe und darin habe ich folgende Bedingung eingebaut.
Problem 1: wenn der User auf den Button klickt, weiss ich nicht, ob der SwingWorker bereits existiert / läuft. Ich habe es mit folgendem Workaround gelöst, aber scheint mir nicht sehr sauber. Gibt es eine bessere Lösung ?
Problem 2: wenn ich den SwingWorker wie oben beschrieben stoppe, dann läuft er noch einen kurzen Moment (ich nehme an, er muss erstmal auf die Bedingung isCancelled treffen. Nach dem Stoppen des SwingWorkers will ich aber die grafische Darstellung auf meiner GUI bereinigen. Wenn ich das gerade im Anschluss zum Stopbefehl mache, hat der SwingWorker scheinbar nochmal Zeit die grafische Darstellung nach dem bereinigen zu zeichnen und sie ist nicht mehr bereinigt.
Wie kann ich abfragen, ob der SwingWorker nun effektiv gestoppt ist?
Danke für eure Tipps.
Ich habe einen SwingWorker den ich mit einem Button auf der GUI stoppen möchte.
In der Methode doInBackground, habe ich eine Berechnungsschlaufe und darin habe ich folgende Bedingung eingebaut.
Java:
protected Void doInBackground() throws Exception {
while (savings.getEinsparungen().size()!=0) {
if (isCancelled()) {
return null;
}
ArrayList<Weg> toursKopie = new ArrayList<Weg>(savings.iterate());
publish(toursKopie);
}
return null;
}
Problem 1: wenn der User auf den Button klickt, weiss ich nicht, ob der SwingWorker bereits existiert / läuft. Ich habe es mit folgendem Workaround gelöst, aber scheint mir nicht sehr sauber. Gibt es eine bessere Lösung ?
Java:
try {
workerVRP.cancel(true);
} catch (Exception e) {}
Problem 2: wenn ich den SwingWorker wie oben beschrieben stoppe, dann läuft er noch einen kurzen Moment (ich nehme an, er muss erstmal auf die Bedingung isCancelled treffen. Nach dem Stoppen des SwingWorkers will ich aber die grafische Darstellung auf meiner GUI bereinigen. Wenn ich das gerade im Anschluss zum Stopbefehl mache, hat der SwingWorker scheinbar nochmal Zeit die grafische Darstellung nach dem bereinigen zu zeichnen und sie ist nicht mehr bereinigt.
Wie kann ich abfragen, ob der SwingWorker nun effektiv gestoppt ist?
Danke für eure Tipps.