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