Java: использование нескольких потоков для одновременной рисования на JPanel - PullRequest
3 голосов
/ 21 мая 2010

У меня есть JPanel, на котором я хочу, чтобы несколько потоков рисовали «анимацию». «Анимация» состоит из JLabel с ImageIcon, который перемещается из одной области экрана в другую.

Теперь проблема в том, что я хочу, чтобы несколько таких анимаций отображались на экране упомянутыми потоками. Проблема в том, что метод JPanel «paint ()» может быть запущен только одним потоком за раз, что приводит к тому, что анимация выполняется последовательно, а не параллельно.

Есть идеи, как сделать несколько таких анимаций одновременно на экране?

Ответы [ 2 ]

4 голосов
/ 21 мая 2010

Невозможно использовать несколько потоков, чтобы делать то, что вы хотите. Swing Toolkit является однопоточным , Правильный способ сделать это - использовать одну из доступных инфраструктур анимации:

2 голосов
/ 21 мая 2010

Swing не является поточно-ориентированным, поэтому просто не поддерживается сценарий использования для выполнения операций с пользовательским интерфейсом из нескольких потоков одновременно.

Перейти к шаблону модель-представление-контроллер (MVC):

  • Разрешить всем потокам обновлять (потокобезопасную) модель.
  • Когда происходит обновление модели, вызывайте перекрашивание.
  • repaint () запланирует поток пользовательского интерфейса для вызова правильных методов рисования.
  • Затем метод paint должен просто прочитать состояние модели и соответственно нарисовать компонент.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...