在背景线程中绘制App的背景?

时间:2014-02-25 17:24:47

标签: java swing

我有一个窗口(公共类Panel扩展JPanel),它正在设置URL

的背景
@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);
}

如果它不会加载图像,那么它将使用Resources中的一个。 问题是那些图像内存很重,加载它们滞后整个窗口。 有没有办法在背景线程中绘制BG? 如果没有,这是一个很好的解决方案:

  1. 使用LayeredPanel
  2. 创建窗口大小的JLabel并将其置于背景中
  3. 创建将获得图像的新Runnable线程和JLabel.setIcon(image)

1 个答案:

答案 0 :(得分:0)

通常,您不应该在任何paint方法中加载资源。在应用程序的生命周期中,将多次调用绘制方法。

尝试使用SwingWorker在后​​台加载图片并在完成后更新面板

您可以在程序开头加载图像作为程序加载过程的一部分,例如....