La manera mas fácil de crear un Splash en Java

2008 Octubre 14

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:

Creacion del proyecto en Netbeans

Creación del proyecto en Netbeans

2. Agregamos un JFrame a nuestro paquete el cual será nuestra ventana de Splash a utilizar:

Creacion del Jframe de la Ventana del Splash

Creacion del Jframe de la Ventana del Splash

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.

  • Asignacion de la imagen al Jlabel que se agrego al ventana Splash
  • Asignacion de la imagen al Jlabel que se agrego al ventana Splash
  • 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.

    Seleccionamos propiedad Undecorated

    Seleccionamos propiedad Undecorated

    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.

    Se implementa la interfaz Runnable con su respectivo objeto Thread y el metodo run.

    Se implementa la interfaz Runnable con su respectivo objeto Thread y el método run.


    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.

    Se implementa la logica de la secuencia en el metodo run.

    Se implementa la lógica de la secuencia en el método run.

    Encerrando el bloque con un try-catch

    Encerrando 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();

    Llamada a la ventana Splash desde main

    Llamada a la ventana Splash desde main

    Resultados:

    Salida

    La ventana Splash se muestra durante 5 segundos

    Ventana principal de la aplicacion

    Ventana principal de la aplicacion

    Esperemos sea de ayuda, Sldox!.

    18 comentarios dejar un →
    1. 2008 Octubre 14

      sss muy bueno eso del splah, hace que las aplicaciones se vean mas pro :O

    2. 2008 Noviembre 24

      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.

    3. 2008 Noviembre 24

      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..!

    4. 2008 Noviembre 25
      carlberto Enlace permanente

      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!

    5. 2008 Diciembre 8

      Interesante … Buen aporte

      tratare de hacer uno para mi aplicacion..

    6. 2008 Diciembre 10

      jeje que bueno que esta entrada es bien recibida por nuestra audiencia, esperen más del autor en breve :)

    7. 2008 Diciembre 15

      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

    8. 2008 Diciembre 30
      carlberto Enlace permanente

      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!

    9. 2009 Enero 30

      Muchas gracias por el aporte, es lo que he estado buescando. Gracias

    10. 2009 Febrero 5

      me alegro mucho que te sirviera, sigue visitandonos

    11. 2009 Junio 17

      Muy útil en varias ocasiones. Gracias x la info. :-)

    12. 2009 Junio 25

      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.

    13. 2009 Agosto 5

      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

    14. 2009 Agosto 5

      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

    15. 2009 Agosto 7

      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

    16. 2009 Agosto 20

      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)

    17. 2009 Agosto 20

      sera q me podrias hacer el favor de ayudarme ….muchisimas gracias

    Referencias & Pingbacks

    1. SplashScreen en Java - Foros de CHW

    Escribe un comentario

    Nota: Puede usar XHTML básico en sus comentarios. Su dirección de correo electrónico nunca será publicada.

    Subscripción al comentario vía RSS