Я интегрировал внешний вид Вещества в свое приложение и столкнулся с рядом проблем, связанных с его внутренними процедурами проверки EDT (Event Dispatch Thread). Вещество абсолютно отказывается строить классы пользовательского интерфейса за пределами EDT. Я сделал много Swing / AWT и знаю большинство правил, касающихся EDT. Я использую SwingWorker, SwingUtilties.invokeLater для изменения компонентов. Я всегда думал, что компоненты могут быть ПРОИЗВЕДЕНЫ вне EDT, но должны быть реализованы и манипулировать на EDT. Другими словами, вы можете создавать и устанавливать значения по умолчанию в фоновом режиме, но вызовом pack / setVisible должен быть EDT, а также любые последующие вызовы для управления компонентом.
Причина, по которой я спрашиваю, заключается в том, что у меня есть особенно «навороченное» окно для создания, включающее множество виджетов, состояний и ресурсов (много значков). Ранее я построил окно на фоновом методе SwingWorker и сделал окно видимым в готовом методе. Никогда не было ни одной проблемы. При переключении на Вещество внутренняя проверка EDT кусает меня.
Мне удалось изменить код, чтобы обойти это. Я могу построить на EDT, который не является хорошим решением, поскольку все приложение будет блокироваться. Я также могу реорганизовать еще больше и постараюсь загрузить все дополнительные ресурсы за пределами EDT.
Завершение ... Безопасно ли конструировать Swing / AWT виджеты НЕ в потоке отправки событий?