Theres no doubting that using Java Swing is time consuming on load times. So heres a demo splash screen to keep your users captivated.

You will need two classes for this example

i.e. Splash.java and SplashWindow.java

(remember line: 8 change this to match your splash image)

just change the class name to match your entry class and bobs your uncle.


Hope this has helped.... remotely

import java.awt.Frame;
import java.awt.Toolkit;
import java.net.URL;

public class Splash {
	public static void main(String[] args) {
		Frame splashFrame = null;
		URL imageURL = Splash.class.getResource("img.png");
		if (imageURL != null) {
			splashFrame = SplashWindow.splash( 
					Toolkit.getDefaultToolkit().createImage(imageURL) );
		} else {
			System.err.println("Splash image not found");
		}
		try { // Change the class name to match your entry class
			Class.forName("MainApp").getMethod("main", new Class[] 
					{String[].class}).invoke(null, new Object[] {args});
		} catch (Throwable e) {
			e.printStackTrace();
			System.err.flush();
			System.exit(10);
		}
		if (splashFrame != null) {
			splashFrame.dispose();
		}
	}
}



/*END OF CLASS*/




import java.awt.Dimension;
import java.awt.EventQueue;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.Image;
import java.awt.MediaTracker;
import java.awt.Toolkit;
import java.awt.Window;

public class SplashWindow extends Window {
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	private Image splashImage;
	private boolean paintCalled = false;
	public SplashWindow(Frame owner, Image splashImage) {
		super(owner);
		this.splashImage = splashImage;
		MediaTracker mt = new MediaTracker(this);
		mt.addImage(splashImage,0);
		try {
			mt.waitForID(0);
		} catch(InterruptedException ie) {}
		int imgWidth = splashImage.getWidth(this);
		int imgHeight = splashImage.getHeight(this);  
		setSize(imgWidth, imgHeight);
		Dimension screenDim = Toolkit.getDefaultToolkit().getScreenSize();
		setLocation( (screenDim.width - imgWidth) / 2, 
				(screenDim.height - imgHeight) / 2 );
	}

	@Override
	public void update(Graphics g) {
		g.setColor(getForeground());
		paint(g);
	}

	@Override
	public void paint(Graphics g) {
		g.drawImage(splashImage, 0, 0, this);
		if (! paintCalled) {
			paintCalled = true;
			synchronized (this) { notifyAll(); }
		}
	}

	@SuppressWarnings("deprecation")
	public static Frame splash(Image splashImage) {
		Frame f = new Frame();
		SplashWindow w = new SplashWindow(f, splashImage);
		w.toFront();
		w.show();
		if (! EventQueue.isDispatchThread()) {
			synchronized (w) {
				while (! w.paintCalled) {
					try {
						w.wait();
					} catch (InterruptedException e) {}
				}
			}
		}
		return f;
	}
}
The article starter has earned a lot of community kudos, and such articles offer a bounty for quality replies.