PaintComponent需要很长时间才能锁定Swing事件调度线程

问题描述:

我已经定制了一个显示大型复杂图形的JPanel。根据数据的大小,可能需要几分钟才能在paintComponent()中进行渲染。我正在寻找一种策略来:PaintComponent需要很长时间才能锁定Swing事件调度线程

  • 绘制组件,而不占用事件调度线程。
  • 在JPanel中绘制一些东西让用户知道图像正在渲染。
  • 定期更新另一个容器的标签,以显示

我研究这个有点进步,我想知道,如果正确的策略是使用的SwingWorker创建一个后台线程,并绘制到一个BufferedImage 。计时器将处理状态更新。类成员变量将保持状态。

我在正确的轨道上吗?

你需要看看使用SwingWorker。你应该在单独的线程中完成图表的渲染。 SwingWorker将有助于实现这一点。

要开始使用并发的多线程,sun有一个great tutorial,这应该证明非常有用。

使用由特殊工作线程更新的背景图像。然后在JPanel的paintComponent()方法中绘制这个图像。该策略被称为双缓冲。你有背景和前景图像。如果单独的线程完成数据的绘制,则将此图像设置为前景和前景加载作为背景。使JPanel无效并在必要时继续在后面的图像上绘画。