Подтвердить что ты не робот

Безопасно использовать Component.repaint() вне EDT?

Я не могу найти официальную документацию, говорящую, что безопасно вызывать Component.repaint из другого потока, кроме потока отправки событий, EDT.

Это так? И где я могу найти документацию/код?

4b9b3361

Ответ 1

Вот кавычка с официальной страницы, в которой указано, что:

Следующие методы JComponent безопасны для вызова из любого потока: repaint(), revalidate(), и invalidate(). Запросы очереди repaint() и revalidate() для event-dispatching для вызова paint() и validate(), соответственно.

РЕДАКТИРОВАТЬ 1:


Поскольку упомянутая предыдущая ссылка смещена. Я размещаю ссылку , хотя для того, чтобы действительно узнать подлинность этой страницы, может потребоваться немного больше времени, поскольку она кажется от Java хотя он возник из некоторого сервера University, как видно из адресной строки.

Ответ 2

Это поточно-безопасный. RepaintManager гарантирует, что такие вызовы помещаются в поток Dispatch Event.

Живопись в AWT и Swing (официальная документация)

Цель класса Swing RepaintManager - максимизировать эффективность обработки перерисовки в иерархии сдерживания Swing и также для реализации механизма реверсификации Swing (последний будет предмет отдельной статьи). Он реализует механизм перерисовки перехватывая все запросы на перерисовку компонентов Swing (так что они больше не обрабатывается AWT) и поддерживая свое собственное состояние в отношении того, что должен быть обновлен (известный как "грязные регионы" ). Наконец, он использует invokeLater() для обработки ожидающих запросов на событие диспетчерский поток, как описано в разделе "Перерисовать Обработка" (вариант B).

Для большинства программ RepaintManager можно рассматривать как часть Swing's внутренней системы и практически можно игнорировать. Однако его API предоставляет программам возможность более тонкого контроля над определенными аспекты живописи.

Ответ 3

об опыте на этом форуме

(+ 1 для обоих ответчиков), но, я думаю, что невозможно правильно ответить на ваш вопрос, часть методов Graphics(2D) запрограммирована на repaint() программно, остальные из них реализуют этот метод (в API) напрямую (конечно, некоторые из них пропускают этот метод в API)

для части Swing JComponents, может быть, лучше не согласиться, этот форум полон вопросов о Concurency in Swing, начиная с Graphics(2D) мысли JTextComponents, JTree и заканчивается (тот же самый путь объявляется как поточный сейф) с setText(),

около Concurency in Swing есть заметные числа вопросов