EDT-нарушения, безусловно, могут вызывать подобное поведение, если эти компоненты каким-то образом взаимодействуют с компонентами Swing (скажем, они подключены как компоненты к слушателям). Конечно, вы можете включить их в таблицы и спросить, есть ли у них утверждения об этих методах и что, если вы включите утверждения, код четко покажет, где нарушено правило EDT.
Редактировать (в ответ на комментарий):
Основное правило с EDT заключается в том, что всякий раз, когда вы запускаете новый поток, не касайтесь какого-либо компонента Swing (или чего-либо, что касается компонента Swing, такого как модель), не помещая этот код в Runnable и не вызывая SwingUtilities. invokeLater (Runnable). Это требует усилий и дополнительных дизайнерских усилий, но, безусловно, необходимо в любом серьезном приложении.
Если у вас есть серьезные средства, вложенные в синхронное поведение (например, всплывающее диалоговое окно и ожидание ответа), вы можете вызвать SwingUtilities.invokeAndWait (Runnable), но вам следует постараться как можно больше избегать этого. , Кроме того, убедитесь, что вы вызываете этот метод, пока не в EDT, иначе он не будет работать.
Один из способов получить такой код под контролем - использовать утверждения вроде этого:
assert (EventQueue.isDispatchThread())
Там, где у вас есть код, который касается GUI и запускается с включенными утверждениями. Таким образом, вы увидите точные пути кода, которые неправильно касаются компонентов Swing.