Безопасно ли использовать 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 Есть ли заметные числа вопросов

Другие вопросы по тегам