Безопасно ли использовать Component.repaint () вне EDT? - PullRequest
24 голосов
/ 20 марта 2012

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

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

Ответы [ 3 ]

27 голосов
/ 20 марта 2012

Вот цитата с официальной страницы о том, что:

Следующие методы JComponent безопасны для вызова из любого потока: repaint()revalidate() и invalidate().Методы repaint() и revalidate() ставят в очередь запросы для потока диспетчеризации событий для вызова paint() и validate() соответственно.

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


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

7 голосов
/ 20 марта 2012

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

Покраска в AWT и Swing («официальная» документация)

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

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

3 голосов
/ 20 марта 2012

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...