Integruję mój wygląd z aplikacją i napotykam na kilka problemów związanych z wewnętrznymi procedurami sprawdzania EDT (Event Dispatch Thread). Substancja absolutnie odmawia konstruowania klas UI poza EDT. Zrobiłem dużo Swing/AWT i znam większość zasad dotyczących EDT. Używam SwingWorker, SwingUtilties.invokeLater do modyfikowania komponentów. Zawsze jednak, że elementy mogą być ZBUDOWANE poza EDT, ale musi być realizowany i manipulowane na EDT. Innymi słowy, możesz budować i konfigurować domyślne ustawienia w tle, ale wywołanie funkcji pack/setVisible musi mieć wartość EDT, jak również wszelkie kolejne wywołania do manipulowania komponentem.Czy można bezpiecznie tworzyć widgety Swing/AWT, a nie wątek wysyłania zdarzeń?
Powodem, dla którego pytam, jest to, że mam szczególnie "rozbudowane" okno do tworzenia, obejmujące wiele widgetów, stanów i zasobów (wiele ikon). Wcześniej skonstruowałem okno na tle metody SwingWorker i uczyniłem okno widocznym w zrobionej metodzie. Nigdy nie miałem jednego problemu. Po przejściu na Substance, wewnętrzne sprawdzanie EDT mnie ugryza.
Udało mi się zreorganizować kod, aby obejść ten problem. Mogę zbudować na EDT, który nie jest dobrym rozwiązaniem, ponieważ cała aplikacja będzie blokować. Mogę również zreorganizować jeszcze więcej i postaram się załadować wszystkie dodatkowe zasoby poza EDT.
Owijanie go ... Czy to bezpieczne skonstruować NIE widgety Swing/AWT na temat zdarzeń wysyłki?
podstępne podstępne ... dziękuję za konkretne dowody, których pragnąłem. Czas na refaktor! – basszero
To więcej warunków wyścigu niż zakleszczenia, które powodują problem. –
@tom: Zgadzam się co do warunków wyścigu - nigdy nie twierdziłem, że to były zakleszczenia, czy ja (właśnie odnosiłem się do "problemów z gwintowaniem")? – netzwerg