2015-03-04 2 views
5

Swing требуется для запуска из Event Dispatch Thread (EDT). Как обеспечить это в контексте Spring?Как совместить Swing и SpringFramework?

В некоторых учебных пособиях, like this one, компоненты swing просто создаются как обычные бобы. Это нормально?

+0

Try Http: // StackOverflow .com/questions/22864008/how-to-configure-spring-boot-with-swing-application – EpicPandaForce

ответ

1

Как вы уже догадались, это будет безопаснее для запуска Свинга кода в событий диспетчерские Темы аки EDT, потому что большинство компонентов Swing, не является поточно. Вот что указано в документах Oracle:

Код обработки событий Swing запускается по специальной теме, известной как событие . Большинство кода, который вызывает методы Swing, также работает на этой теме. Это необходимо, потому что большинство методов объекта Swing: не «потокобезопасный»: вызывать их из нескольких потоков, подвергая потоки ошибкам согласования помех или ошибок.

Таким образом, вы должны быть безопасными, чтобы пойти, если ваш initialiaze ваш SpringApplicationContext Whithin нить 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 
    } 
}); 
+0

не это не очень хорошая идея, EDT waitng до тех пор, пока не загрузится содержимое класса ClassPathXmlApplicationContext, invokeLater предназначен для уведомления методов, реализованных в Swing API, методы в этих API, – mKorbel

+0

Это может быть ярлык да, а не n окончательное решение. – tmarwen