Normally, programmer uses image for label: JLabel label = new JLabel(new ImageIcon(imageName));
Use proxy instead: JLabel label = new JLabel(new ImageProxy(imageName));
paintIcon loads image if not previously loaded public void paintIcon(Component c, Graphics g, int x, int y) { if (image == null) image = new ImageIcon(name); image.paintIcon(c, g, x, y); }