W ciągu ostatnich kilku lat głównie rozwijałem UI w Eclipse, co jest bardzo konserwatywne pod względem dostępu do wątku: każda próba zmiany właściwości widżetu interfejsu użytkownika (np. Koloru, tekstu) spoza wątków interfejsu użytkownika wyjątek.Co się stanie, gdy naruszona zostanie polityka Swinga dotycząca gwintowania?
Teraz szukam istniejącego programu w Swing, który ma okno z dużą liczbą niestandardowych widgetów. Istnieją osobne wątki, które uruchamiają funkcję mutacji dla każdego z tych widgetów, a funkcja mutacji odczytuje wartość niektórych rzeczy (np. Kolory i wartości etykiet) i zapisuje niektóre (np. Zmienia kolory tła). Zauważ, że nie ma w tym przypadku niestandardowego malowania lub czegoś podobnego, tylko kilka zmian w podrzędnych elementach widżetów, które zawierają głównie JLabelki.
Obecnie trwa to od oddzielnego wątku, a nie od wątku zdarzenia Swing. Ten wątek obejmuje wszystkie 400 widgetów i wywołuje mutator na każdym z nich. Wydaje się, że aktualizacje działają poprawnie, ale GUI nie reaguje na dane wprowadzone przez użytkownika.
Jeśli przyjmiemy całą rzecz, która działa przez około 0,4 milisekundy spoza wątku Swing i zawija każde wywołanie do mutatora w wywołaniu WhenLock lub invokeAndWait, interfejs jest o wiele bardziej responsywny.
Co Próbuję zrozumieć to:
1) Czy czasami uzasadnione, aby wszystkie te połączenia spoza wątku Swing?
2) Jaki jest wpływ na wątek Swing i dlaczego interfejs jest mniej responsywny, gdy nazywam go z zewnątrz?