Swing изисква да се изпълнява от Event Dispatch Thread (EDT). Как да се гарантира това в контекста на пролетта?
В някои уроци, като този, swing компонентите просто се инстанцират като нормални зърна. Това добре ли е?
Swing изисква да се изпълнява от Event Dispatch Thread (EDT). Как да се гарантира това в контекста на пролетта?
В някои уроци, като този, swing компонентите просто се инстанцират като нормални зърна. Това добре ли е?
Както вече се досетихте, би било по-безопасно да стартирате вашия Swing код в рамките на Event Dispatching Thread известен още като EDT, тъй като повечето компоненти на Swing са не е безопасен за нишка. Ето какво се казва в документите на Oracle:
Кодът за обработка на събития на Swing се изпълнява на специална нишка, известна като нишка за изпращане на събития. Повечето кодове, които извикват методи на Swing, също се изпълняват в тази нишка. Това е необходимо, защото повечето методи на Swing обекти не са "безопасни за нишки": извикването им от множество нишки рискува смущения в нишките или грешки в консистенцията на паметта.
Така че трябва да сте в безопасност, ако инициализирате вашия Spring ApplicationContext
в нишката EDT, така че вашите компоненти да бъдат инициализирани и да работят в една и съща нишка:
SwingUtilities.invokeLater(new Runnable()
{
public void run()
{
new ClassPathXmlApplicationContext( "your-application-context.xml" ); // pay attention to context so that it is not left open
}
});