Недавно я узнал, что в самых последних рекомендациях Sun / Oracle говорится, что никакие методы Swing каких-либо объектов Swing, включая конструкторы, не должны вызываться вне EDT.
Применяется ли тот же стандарт строгости ко всем «визуальным» классам AWT? Если нет, то каковы ** правила для них?
позже
re Swing и EDT: обсуждение с 2009 г.
цитата: «Помимо фактической безопасности потоков и связанных с этим проблем, таких как видимость и синхронизация, я думаю, что есть проблема программного обеспечения. Компоненты Swing часто имеют« слушатели »того или иного типа, и эти слушатели предназначены для выполнения в EDT.
Поскольку эти прослушиватели являются асинхронными и реагируют на события (например, изменения свойств), возможно, чтобы эти прослушиватели срабатывали при создании вашего графического интерфейса. В результате некоторые слушатели выполняются в EDT по мере того, как вы строите в своем основном потоке, а некоторые слушатели могут работать и в каком-то другом потоке (потому что слушатель сбит с толку и запускается не в том потоке). Результат - огромный непредсказуемый беспорядок ».
возможно, они не знают, о чем говорят ... но в данный момент я придерживаюсь подхода «лучше перестраховаться, чем сожалеть». Также Поточкин, на http://weblogs.java.net/blog/alexfromsun/archive/2006/02/debugging_swing.html, похоже, считает, что мы знакомы с более поздними, более строгими правилами.
repaint()
, и это хорошо задокументировано в Java API. Я не занимаюсь кодированием AWT, но могу представить, что документация по этому поводу будет аналогичной. - person Hovercraft Full Of Eels   schedule 14.09.2012