2013-05-01 2 views
0

У меня есть класс Java-апплета, который реализует runnable. В методе run() этого класса у меня есть вызов repaint(). Содержимое метода run содержится в бесконечном цикле. В init() класса апплета я использую new Thread(this).start(), чтобы запустить второй поток. Мой вопрос: если вызов метода repaint() из метода run() будет сигнализировать основному потоку для выполнения paint(), или если paint() будет выполняться как часть второго потока. Если первый, то второй поток продолжит цикл, не дожидаясь (если возможно) для paint() для выполнения?Вызов repaint() из основной темы в java-апплете

ответ

0

Технически, Диспетчерская тема событий - это собственный поток, отдельный от (основной) нити, запускающей апплет.

Процесс перерисовки запланирован на RepaintManager. Короткий ответ в основном заключается в том, что RepaintManager запланирует перерисовки, появляющиеся в разделе «Диспетчер событий».

Можно ли позвонить repaint непосредственно из отдельной темы? Было бы возразить, что это не очень хорошая практика.

В связи с этим я склонен ошибаться на стороне осторожности и просто гарантирую, что все взаимодействия с пользовательским интерфейсом и синхронизируются с EDT независимо. Сохраняет много второго угадывания, IMHO

Насколько я понимаю, repaint обычно считается потокобезопасным. Это не значит, что это останется в будущем.

+0

Спасибо за ответ, но на самом деле он не отвечает на мой вопрос. =/ – fvgs

+0

Ответ - не полагайтесь на то, что он был потокобезопасным и приложил все усилия, чтобы по возможности называть 'repaint' из EDT (используя что-то вроде' SwingUtilities.invokeLater' - но это мое личное чувство на предмет – MadProgrammer

Смежные вопросы