Swing ma wątek, który jest odpowiedzialny za umożliwienie użytkownikowi interakcji z graficzną częścią aplikacji. Jeśli wykonasz tylko szybkie zadania w odpowiedzi na zdarzenia zainicjowane przez użytkownika, aplikacja zawsze będzie reagować.
Być może problem występuje, jeśli wykonujesz długo działające zadanie, ze zdarzenia inicjowanego przez użytkownika, bez używania oddzielnego wątku do uruchomienia tego zadania - problem polega na tym, że podczas wykonywania zadania aplikacja zostanie zablokowana. Żadnych powtórzeń, użytkownik nie będzie w stanie wchodzić z nim w interakcję, będzie wyglądać, jakby aplikacja się zablokowała.
Jeśli wykonujesz zadanie w oddzielnym wątku (na przykład pobierasz stronę i chcesz powiadomić użytkownika, że pobieranie zostało zakończone), nie możesz zaktualizować Swing bezpośrednio z tego zadania, zamiast tego musisz użyć jednej z metod pomocniczych wymienionych w twoim pytaniu.
Jest to bardziej pracochłonny proces tworzenia tych zadań, dzięki czemu aplikacja zawsze reaguje na polecenia - ale jeśli używasz czegoś, co zajmuje dużo czasu (pobranie pliku jest dobrym przykładem), aplikacja będzie nadal działać. Bądź responsywny nawet podczas wykonywania zadania, a nawet możesz pozwolić użytkownikowi anulować zadanie, tak długo, jak pozwala na to samo zadanie. Możesz użyć modalnego okna dialogowego, aby uniemożliwić użytkownikowi robienie czegoś innego podczas wykonywania zadania (jeśli chcesz to zrobić) lub mieć okno dialogowe postępu wyświetlające obracające się kółko lub coś w tym stylu. Ale myślę, że ważne jest, aby użytkownik nie pomyślał, że aplikacja po prostu "zamarła" bez powodu.
Chciałbym wiedzieć, dlaczego w tej sprawie ... co jest z tym nie tak? – gotch4
Mieć upto. Myślę, że twoje pytanie jest w porządku. –
Może mógłbyś zamieścić odniesienie do tego, gdzie to usłyszałeś? – Axel