Package de.stefanreiser.swing.worker
Interface Cancelable
- All Known Implementing Classes:
CancelableDummy
,CancelableRunnable
public interface Cancelable
- Author:
- reiser
-
Method Summary
Modifier and Type Method Description void
cancel()
Signalisiert einem Thread, dass die Arbeit abgebrochen werden soll.boolean
hasReceivedCancelCommand()
Hier kann der Worker erfahren, ob die Arbeit abgebrochen werden soll.
-
Method Details
-
cancel
void cancel()Signalisiert einem Thread, dass die Arbeit abgebrochen werden soll. Anmerkungen: Ausschließlich diese Methode sollte zum sicheren Abbrechen verwendet werden. Dagegen sollte die von SwingWorker geerbte Methode public final boolean SwingWorker.cancel(boolean mayInterruptIfRunning) nicht mit mayInterruptIfRunning=true benutzt werden! Sie löst dann eine InterruptedException aus, die Schaden anrichten kann: Falls im Thread gerade I/O-Aufrufe durchgeführt werden, wird diese Exception gefangen. Der Worker erfährt daher nicht, dass er abbrechen soll, während die I/O-Aufrufe auf eine nicht vorhersehbare Weise unterbrochen werden. (Leider kann die geerbte Methode nicht durch Überschreiben deaktiviert werden, weil sie als 'final' deklariert ist.) Der Aufruf mit mayInterruptIfRunning=false entspricht dem hier implementierten Mechanismus. Der Worker muss selbst zu Zeitpunkten, die ihm passen, nachsehen, ob abgebrochen werden soll (--> Anmerkung: Das Verhalten des Parameters mayInterruptIfRunning ist zwar dokumentiert, aber eine Google-Suche nach SwingWorker/cancel zeigt, dass viele Missverständnisse verbreitet sind, wie man einen Swingworker sicher abbricht). -
hasReceivedCancelCommand
boolean hasReceivedCancelCommand()Hier kann der Worker erfahren, ob die Arbeit abgebrochen werden soll. Die Methode kann zu Zeitpunkten, zu denen ein Abbruch möglich ist, abgefragt werden. Achtung: Für Implementierungen mit Flags immer "volatile" benutzen!- Returns:
- true, wenn ein Unterbrechungswunsch eingereicht wurde.
-