Вопрос

Есть много методов, которые вам не следует вызывать, если вы не находитесь в потоке событий AWT.Как правило, это методы, которые каким-то образом манипулируют пользовательским интерфейсом.

Так ли это в случае с getGraphicsConfiguration компонента(...)?Это всего лишь средство получения, но, похоже, оно вызывает взаимоблокировку, если поток событий ожидает поток, вызывающий этот метод.

Хотя решение тупиковой ситуации довольно тривиально (избегайте использования wait или synchronize в потоке событий), должен ли я вызывать getGraphicsConfiguration только в Runnable, переданном SwingUtilities.invokeLater(...) или invokeAndWait(...)?

Это было полезно?

Решение

Потокобезопасность AWT (обязательно) нарушена.Просто не подходи к нему близко.Оставайтесь на прямой AWT EDT

Также обратите внимание, что только потому, что метод находится в java.awt.Component, это не означает, что объект (или объект, на который он ссылается) не находится в Swing и, следовательно, на самом деле даже не претендует на потокобезопасность вообще.(Достаточно отказов?)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top