Moje pytanie brzmi jak można w obiekcie JList bezpiecznie usuwać elementy z innego wątku aniżeli watek dystrybucji zdarzeń? Nie chciał bym korzystać z SwingWorker ponieważ w przypadku którym się akurat zajmuję był by to przerost formy nad treścią, interesuje mnie „krótsze” rozwiązanie.
Pozdrawiam
Nie musisz rozszerzać SwingWorker. Wystaczy zaimplementować Runnable.
To co musisz zrobić to spowodować wystąpienie zdarzenia, którego obsługa w Event Dispatching Thread będzie polegała na usunięciu czegoś z listy (i odrysowaniu widoku). SwingWorker jest do tego stworzony. Nie trzeba implementować wszystkich metod, wystarczy dwie chyba. Można to zrobić jako klasę anonimową w treści metody nawet.
SwingWorker jest stworzony do zadań które trwają dosyć długo, tzn więcej niż np 100 ms i mogłoby powodować spore lagi w GUI, a w międzyczasie chciałyby uaktualniać GUI. Runnable wystarczy do pojedyńczych zadań, które są bardzo krótkie, najlepiej rzędu < 10 ms, taki lag nikomu nie będzie przeszkadzał o ile nie zaspamujemy EDT tymi Runnable, tak że większość czasu EDT będzie wykonywał nasze zadania.
autor:
Jeśli chcesz usuwać z JListy, to może dobierz się bezpośrednio do jej modelu? Nawet jak zrobisz synchronizację na metodach w tym modelu to nie powinno być zakleszczeń.