La manera mas fácil de crear un Splash en Java
Muchas de las veces que queremos que nuestra aplicación tenga un aspecto a la vez más profesional y más amigable es a través del uso de un “Splash Screen”, que son esas ventanitas que se nos abre antes de la ventana principal de la aplicacion y que forma parte de la presentación del programa.
Una de las maneras más sencillas de crear una ventana Splash, es através de un simple JFrame y su modificación en el atributo de Undecorated, dejo aqui un breve tutorial de como crear una sencilla ventana Splash através de la potente y conocida herramienta Netbeans:
1. Creamos el proyecto que contendrá nuestra aplicación:
2. Agregamos un JFrame a nuestro paquete el cual será nuestra ventana de Splash a utilizar:
3. En el Editor de Diseño del Frame, agregamos un JLabel de nuestra paleta de componentes. A este Label le quitamos el texto que trae por default y lo dejamos vacio. Asignamos la imagen que deseamos que se muestre como splash a través de la propiedad “icon” de Jlabel, ésta puede ser una imagen que hemos agregado a nuestro proyecto o cualquier otra externa.

4. Despues de ajustar el Frame al tamaño del La imagen (o del Label), en el Editor de Diseño del Frame, accedemos al panel de propiedades y buscamos la opcion “Undecorated“. La seleccionamos, esta opcion quitará la decoración del ventana que contiene los controles de minimizar, maximizar y cerrar, dándo una apariencia de que se trata sólo de la imagen.

Hasta aqui hemos terminado con el diseño de la ventana, ahora cederemos a la lógica que hace posible que nuestra ventana se muestre un pequeño lapso de tiempo y después de éste se cierre.
5. Extendemos nuestra clase de la ventana Splash a la interface “Runnable” a través de: “implements Runnable”. Agregamos un objeto Thread como atributo y un método run a la misma clase.
6. El método run será por quien se entrará a la clase, por lo que en este método se desarrollará toda la secuencia de inicio de nuestra aplicación. Nos marcará un tip error, verificamos la advertencia y optamos por encerrar el bloque con un try-catch.
Nota: Se hace el supuesto que se cuenta con otra Ventana (JFrame) que hace de ventana principal de la aplicación. De cualquier manera, se puede generar cualquiera para pruebas.
7. Por último, desde nuestra clase main llamarémos a la ventana Splash, la cual generaremos a través de un Thread:
new Thread (new Splash()).start();


Resultados:
Esperemos sea de ayuda, Sldox!.


















sss muy bueno eso del splah, hace que las aplicaciones se vean mas pro :O
hola amigo hice exactamente como explicas en tu tutorial si me muestra el splash pero luego la ventana 2 no carga, mejor dicho no aparece y la aplicacion sigue corriendo. ayudame please.. gracias.
HOla amigo ya lo solucione jejeje en la parte del codigo :
del splash una correccion:
public void run() {
try{
this.setLocationRelativeTo(null);
this.setVisible(true);
t.sleep(5000);
this.dispose();
new Ventana().setVisible(true); // ACA ES EL CAMBIO
// f1.setVisible(true);
// throw new UnsupportedOperationException(“Not supported yet.”);
}
catch(InterruptedException ex){
Logger.getLogger(frmsplash.class.getName()).log(Level.SEVERE,null, ex);
}
}
bUENo al que le pueda servir chevere ps solo faltaba agregarle .setVisible(true);
Hasta la proxima..!
Que tal David, perdona si hasta ahora te responda tus comentarios y bueno que hayas arreglado tu problema, comentarte solo que en mi caso dejo el metodo setVisible puesto en el constructor de la clase de la ventana para que no se tenga que llamar externamente pero solo lo considero una buena practica de programaciòn, de esa u otra manera trabaja, Sldox!
Interesante … Buen aporte
tratare de hacer uno para mi aplicacion..
jeje que bueno que esta entrada es bien recibida por nuestra audiencia, esperen más del autor en breve
antes que nada me gustaria felicitarte por este tutorial esta exelente solo una cosa no me admite esta linea:
Logger.getLogger(frmsplash.class.getName()).log(Level.SEVERE,null, ex);
y la segunda aplicacion ya no se quiere cerrar ademas de aparecer muy pequeña en la parte superior de mi ventana que puedo hacer por tu atencion gracias
Que tal Josue, una disculpa por contestarte hasta ahora. Acerca del problema en tu aplicacion, la linea “Logger.getLogger(Splash.class.getName()).log(Level.SEVERE,null, ex);” es una linea “autogenerada” por Netbeans 6.1 despues que apareciera un tip error (asi llamo al foquito con el circulo rojo y un signo de interrogacion) en la linea
t.sleep(5000);
Asi que si copiaste el codigo y su logica “a mano”, si estas en otra version de Netbeans o utilizas otro IDE para desarrollar tu aplicacion, es probable que genere error.
De cualquier manera el tipo de excepcion que señala debe ser el mismo asi que intenta reemplazando la linea del error por un solo system.out.print:
try {
this.setLocationRelativeTo(null);
this.setVisible(true);
t.sleep(5000);
this.dispose();
new Ventana();
} catch (InterruptedException ex) {
System.out.println(“problema: ” + ex) ;
}
O puedes aplicarlo solo a la linea:
this.setLocationRelativeTo(null);
this.setVisible(true);
try{
t.sleep(5000);
} catch (InterruptedException ex) {
System.out.println(“problemas” + ex) ;
}
this.dispose();
new Ventana();
Acerca del problema de la Segunda aplicacion solo puedo sugerirte que tambien utilices el metodo “setLocationRelativeTo(null)” para centrarla, y que le des dimensiones adecuadas donde los metodos “setSize”, “setMinimumSize” y otros te pueden servir, recomiendo que se implementen en el constructor de la Segunda aplicacion.
Espero te sirva y soluciones el problema. Sldox!
Muchas gracias por el aporte, es lo que he estado buescando. Gracias
me alegro mucho que te sirviera, sigue visitandonos
Muy útil en varias ocasiones. Gracias x la info.
Hola, como estás, queria felicitarte por la web, me parece muy buena.
También queria hacerte un comentario. He seguido este tutorial, paso a paso, y no me anduvo el Splash. No me cargaba la pantalla.
Pero lo he solucionado, lo que tuve que modificar en mi proyecto fue, que la Clase principal, pasara a ser Splash.java y no Menu.java, como era antes del tutorial.
En ese caso, funcionó perfectamente!!!.
Saludos, marcelo.
hola, felicitaciones por tu web, he seguido el tutorial pero me genera un error al llamar a la ventana splash en la clase main exacatamente en el Thread. que puedo hacer para solucionarlo espero repuesta. gracias
ya arregle lo del Thread pero y el codigo es exactamente igual pero la segunda ventana no aparece y se sigue ejecutando el splash. espero tu ayuda gracias
Este método no me va, se me queda la imagen del Splash arriba a la izquierda de la pantalla. No entiendo cual es el error, he seguido paso a paso todas las indicaciones pero no consigo resolverlo. Agradecería que me prestaras tu ayuda, gracias.
Un saludo
Hola q mas la verdad muy bueno tu tutorial muchas gracias
estos son los errores q me arroja al momento de ejecutar
at javax.swing.ImageIcon.(ImageIcon.java:167)
at Splash.initComponents(Splash.java:60)
at Splash.(Splash.java:27)
at Splash$1.run(Splash.java:73)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:597)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
sera q me podrias hacer el favor de ayudarme ….muchisimas gracias