Безопасно ли использовать Component.repaint() вне EDT?
Я не могу найти официальную документацию о том, что звонить безопасно Component.repaint
из другого потока, чем поток обработки событий, EDT.
Это так? И где я могу найти документацию / код?
3 ответа
Вот цитата с официальной страницы о том, что:
Следующие методы JComponent безопасны для вызова из любого потока:
repaint()
,revalidate()
, а такжеinvalidate()
,repaint()
а такжеrevalidate()
запросы очереди методов для потока диспетчеризации событий для вызоваpaint()
а такжеvalidate()
соответственно.
РЕДАКТИРОВАТЬ 1:
Так как предыдущая ссылка была смещена. Я публикую новую ссылку, хотя на самом деле может потребоваться немного больше времени, чтобы узнать подлинность этой страницы, поскольку она, по-видимому, Java
хотя это произошло от некоторых University
сервер, как видно из адресной строки.
Это потокобезопасно. RepaintManager
гарантирует, что такие вызовы размещаются в потоке отправки событий.
Живопись в AWT и Swing ("официальная" документация)
Цель Swing's
RepaintManager
Класс предназначен для максимизации эффективности обработки перерисовки в иерархии содержимого Swing, а также для реализации механизма "повторной проверки" Swing (последний будет предметом отдельной статьи). Он реализует механизм перерисовки, перехватывая все запросы на перерисовку компонентов Swing (поэтому они больше не обрабатываются AWT) и поддерживая свое собственное состояние для того, что необходимо обновить (так называемые "грязные области"). Наконец, он используетinvokeLater()
обрабатывать ожидающие запросы в потоке диспетчеризации событий, как описано в разделе "Обработка перерисовки" (опция B).Для большинства программ RepaintManager можно рассматривать как часть внутренней системы Swing, и его можно практически игнорировать. Однако его API предоставляет программам возможность получить более точный контроль над некоторыми аспектами рисования.
Об опыте на этом форуме
(+1 для обоих ответчиков) но, я думаю, что невозможно ответить на ваш вопрос правильно, часть методов Graphics(2D)
требуется вызов для repaint()
программно, остальные из них реализуют этот метод (в API
) напрямую (уверен, что некоторые из них пропускают этот метод в API)
для части Swing JComponents
Может быть, лучше не соглашаться, этот форум полон вопросов о Concurency in Swing
, начиная с Graphics(2D)
думал JTextComponents
, JTree
и заканчивается (таким же образом объявлен как потокобезопасный) setText()
,
около Concurency in Swing
Есть ли заметные числа вопросов