【发布时间】:2014-03-28 02:45:41
【问题描述】:
我有一个从 URL 设置背景的窗口(公共类 Panel 扩展 JPanel)
@Override
protected void paintComponent(Graphics g)
{
super.paintComponent(g);
try
{
this.imgBG = ImageIO.read(new URL("http://myhost.com/bg.png"));
}
catch (Exception e)
{
System.out.println("[ERROR] Could not load custom background image! Using resources.");
this.imgBG = Toolkit.getDefaultToolkit().getImage(getClass().getResource("/Resources/bg.png"));
}
g.drawImage(imgBG, 0, 0, this);
}
如果它不会加载图像,那么它将使用资源中的一个。 问题是那些图像在内存中很重并且加载它们是滞后整个窗口。 有没有办法在后台线程中绘制 BG? 如果没有,这是一个好的解决方案吗:
- 使用分层面板
- 创建具有窗口大小的 JLabel 并将其置于背景中
- 创建新的 Runnable 线程来获取图像和 JLabel.setIcon(image)
【问题讨论】:
-
如果您每次调用
paintComponent时都加载图像,我认为您会遇到严重的滞后 或性能问题。 特别是如果图像是从网络加载的。一般来说,从后台线程绘画不是一个好主意。除非您尝试进行主动渲染,否则您应该将绘画留给 Event-Dispatch 线程。在任何情况下,如果可能,请在进行任何绘画之前加载图像。 -
使用
SwingWorker,见here。 -
谢谢,有用的东西。