PaintComponent需要很长时间才能锁定Swing事件调度线程
问题描述:
我已经定制了一个显示大型复杂图形的JPanel。根据数据的大小,可能需要几分钟才能在paintComponent()中进行渲染。我正在寻找一种策略来:PaintComponent需要很长时间才能锁定Swing事件调度线程
- 绘制组件,而不占用事件调度线程。
- 在JPanel中绘制一些东西让用户知道图像正在渲染。
- 定期更新另一个容器的标签,以显示
我研究这个有点进步,我想知道,如果正确的策略是使用的SwingWorker创建一个后台线程,并绘制到一个BufferedImage 。计时器将处理状态更新。类成员变量将保持状态。
我在正确的轨道上吗?
答
你需要看看使用SwingWorker
。你应该在单独的线程中完成图表的渲染。 SwingWorker
将有助于实现这一点。
要开始使用并发的多线程,sun有一个great tutorial,这应该证明非常有用。
答
使用由特殊工作线程更新的背景图像。然后在JPanel的paintComponent()方法中绘制这个图像。该策略被称为双缓冲。你有背景和前景图像。如果单独的线程完成数据的绘制,则将此图像设置为前景和前景加载作为背景。使JPanel无效并在必要时继续在后面的图像上绘画。