我有一个窗口(公共类面板扩展JPanel)是从URL在后台线程中绘制App的背景?
@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? 如果不是,这是一个很好的解决方案:
- 使用采用LayeredPanel
- 与窗口的大小创建一个JLabel并将其放置在背景
- 结交新运行的线程,将获得的图像和JLabel.setIcon(图像)
我认为如果每次调用paintComponent时都会加载图像,那么您会遇到严重的* lag *或性能问题。 *特别是*如果图像是从网络加载的。一般而言,从后台线程绘画并不是一个好主意。您应该将绘画留给事件派发线程,除非您正在尝试*主动渲染*。无论如何,如果可能的话,在做任何绘画之前加载图像。 – afsantos
使用'SwingWorker',见[这里](http://stackoverflow.com/q/4530428/230513)。 – trashgod
谢谢,有用的东西。 – Ernio