Obsługa wyjątków w SwingWorker

0

Hej,

W metodzie doInBackground() klasy dziedziczącej po SwingWorker wykonuję wczytanie dużego pliku. Mam niestety problem z łapaniem wyjątków. Chciałbym aby w momencie wystąpienia wyjątku (np. typu IOException) przerwać cały wątek roboczy (związany z doInBackground() ) i w wątku EventDispatchThread (czyli w GUI) wyświetlić jakiś komunikat. Ktoś pomoże? W wyniku googlowania widzę że problem nie jest trywialny, ludzie polecają jakieś menedżery wyjątków itp. - nie można tego zrobić prościej? :)

--
Maciek

0

Przekaz w konstruktorze do tego swojego worker'a referencje na klase GUI i w razie wystapienia wyjatku wywolaj jej metode np showLoadingLargeFileException() ;) Choc to oczywiscie niezalecana praktyka, ale zadziala ;)

0

Zadziałać zadziała, ale po to korzystam ze SwingWorker'a zamiast zwyczajnie dziedziczyć po Runnable żeby było elegancko ;) W ten sposób wymieszam swój wątek roboczy z EDT...

0

A może użyj addPropertyChangeListener? Tzn twoja klasa GUI powinna się dodać jako ten listener (albo listener byłby ściśle powiązany z GUI) i w metodzie done() (która jest odpalana w EDT) wywołałbyś firePropertyChange.

Albo żeby było prościej to po prostu przekaż referencję do GUI w konstruktorze i w metodzie done() jakoś poinformuj to GUI o wyjątku. Metoda get() rzuca ExecutionExceptionem opakowującym exception wywalony w doInBackground.

0
donkey7 napisał(a)

Metoda get() rzuca ExecutionExceptionem opakowującym exception wywalony w doInBackground.

I o to mi chodziło :) Jako że z metody doInBackground nic nie zwracałem (Void) nie korzystałem z get() bo nie było potrzeby - teraz się okazuje że jednak była (bo mogę w ten sposób "odzyskać" wyjątki :) Dzięki! :)

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