0

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;
	}
}
2
Contributors
1
Reply
4
Views
10 Years
Discussion Span
Last Post by newtonorina
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.