2015-03-04 10 views

Odpowiedz

1

Jak już domyślić, że byłoby bezpieczniej uruchomić Swing kod ciągu Dysponowanie Event wątek aka EDT ponieważ większość komponentów Swing wątku nie są bezpieczne. Oto, co zostało powiedziane w dokumentach Oracle:

Kod obsługi zdarzenia Swing działa na specjalnym wątku znanym jako zdarzenie wątek wysyłki. Większość kodu wywołującego metody Swing działa również w tym wątku na . Jest to konieczne, ponieważ większość metod obiektów Swing nie jest "bezpieczna dla wątków": wywoływanie ich z wielu wątków może powodować błędy interferencji lub pamięci spójności wątku.

Tak powinno być bezpieczne, aby przejść jeśli initialiaze swój WiosnaApplicationContext ciągu, wątku EDT tak, że składniki uzyskać zainicjowany i prowadzony w tym samym wątku:

SwingUtilities.invokeLater(new Runnable() 
{ 
    public void run() 
    { 
    new ClassPathXmlApplicationContext("your-application-context.xml"); // pay attention to context so that it is not left open 
    } 
}); 
+0

nie jest to dobry pomysł, EDT waitng, dopóki cokolwiek z ClassPathXmlApplicationContext nie jest załadowany, invokeLater jest przeznaczony do powiadamiania o metodach zaimplementowanych w Swing API, metody w tych interfejsach API, – mKorbel

+0

Może to być skrót tak, a nie n ostateczne rozwiązanie. – tmarwen