Активный рендеринг и EDT (Swing анимация) - PullRequest
2 голосов
/ 26 марта 2009

Как запустить анимацию в апплете Swing?

У меня есть анимационный поток, выполняющий активный рендеринг, и он изначально анимируется нормально. Иногда (где-то от 1 минуты до 2 часов спустя) происходит сбой при обновлении экрана, и появляются только звуки. Я полагаю, что это связано с тем, что рисование не выполняется с помощью EDT, что вызывает некоторую проблему параллелизма.

Итак, должен ли активный рендеринг (т.е. getGraphics () и рисование) вызываться только из EDT? Проблема в том, что таймеру Swing не хватает точности.

Или у кого-нибудь был успех с активным рендерингом без использования EDT и с полным отключением любых обновлений EDT на странице (возможно, с использованием Canvas / или игнорированием перерисовки на JPanel)?

Ответы [ 2 ]

2 голосов
/ 26 марта 2009

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

1 голос
/ 27 марта 2009

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

Не зная вашего конкретного случая использования, это все, что я мог придумать без головы.

...