SwingWorker nie zatrzymuje się

0

Mam klasę rozszerzającą SwingWorker nazwijmy ją "simpleWork" po niej dziedziczy kilka klas.
W zależności od tego co wybierze użytkownik do referencji simpleWork przypisywana jest jedna z jej klas potomnych, a następnie jest uruchamiana. Korzystając informacji zawartych tu http://docs.oracle.com/javase/tutorial/uiswing/concurrency/cancel.html chce zatrzymać wykonywanie zadania (jednego z potomków) używając drugiej metody.
Po wywołaniu simpleWork.cancel(true) metoda isCancelled() zwraca raz true a w kolejnych iteracjach false wiec warunek stopu związany ze sprawdzaniem jej wartości nie działa.

Co jest tego powodem? Dlaczego w brew temu co pisali w dokumentacji zwraca ona false po cancel()?

1

Twoim zadaniem jest wywolywanie isCancelled w metodzie doInBackground(), np. co iteracje w petli czy co pare akcji. Link ktory podales mowi:

To respond to an interrupt, the background task would have to invoke Thread.isInterrupted at short intervals. It's just as easy to use SwingWorker.isCancelled for the same purpose.

Tutaj, w API: http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingWorker.html, w przykladach jest pokazane gdzie i jak wolac isCancelled:

    @Override
     public List<Integer> doInBackground() {
         while (! enough && ! isCancelled()) {
                 number = nextPrimeNumber();
                 publish(number);
                 setProgress(100 * numbers.size() / numbersToFind);
             }
         }
         return numbers;
     }

1 użytkowników online, w tym zalogowanych: 0, gości: 1