Skip to content

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

octubre 14, 2008

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

    About these ads
    35 comentarios leave one →
    1. octubre 14, 2008 12:36 pm

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

    2. David permalink
      noviembre 24, 2008 4:10 am

      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. David permalink
      noviembre 24, 2008 4:34 am

      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. carlberto permalink
      noviembre 25, 2008 9:29 pm

      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. Pol permalink
      diciembre 8, 2008 7:20 am

      Interesante … Buen aporte

      tratare de hacer uno para mi aplicacion..

    6. diciembre 10, 2008 8:39 pm

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

    7. Josue permalink
      diciembre 15, 2008 6:13 pm

      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. carlberto permalink
      diciembre 30, 2008 4:26 pm

      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. Leo_Cort permalink
      enero 30, 2009 8:43 pm

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

    10. febrero 5, 2009 10:48 pm

      me alegro mucho que te sirviera, sigue visitandonos

    11. junio 17, 2009 11:53 am

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

    12. marcelo permalink
      junio 25, 2009 11:12 am

      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. sameds permalink
      agosto 5, 2009 12:05 am

      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. sameds permalink
      agosto 5, 2009 12:43 am

      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. agosto 7, 2009 9:55 pm

      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. oloa permalink
      agosto 20, 2009 10:16 pm

      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. oloa permalink
      agosto 20, 2009 10:17 pm

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

    18. Titan permalink
      noviembre 21, 2009 7:13 am

      Como se conectan despues de llamar el splash. como conecto el splash a el formulario ventana??

    19. victor permalink
      diciembre 8, 2009 7:48 am

      por mas que le di vueltas no se como diantres sacaste la clase Splash

    20. alex permalink
      abril 27, 2010 1:08 pm

      hola muchachos saludos desde cartagena colombia…todo me carga bien pero no me carga el skin que le aplique ya se lo aplique a la clase pricipal del esplash pero ahora no carga la ventana principal del proyecto

    21. samuel permalink
      abril 28, 2010 3:23 am

      Amigo este tutorial este perfecto, pero porque no poner el codigo online para descarga directa, seria bueno que lño pongas

    22. omar permalink
      mayo 3, 2010 10:38 pm

      esto es muy buenmo. gracias por contribuir con la comunidad java

    23. mayo 11, 2010 11:05 pm

      Muy bueno el tutorial, gracias. XD

    24. Kebym permalink
      mayo 27, 2010 9:29 pm

      Es posible poner este Splash en una pagina Web?
      Como tendria que hacer para que cuando inicia mi Index arraque con el Splash??

      Quiza entendi mal y este splash solo sirve para programas…

    25. agosto 30, 2010 2:56 pm

      Excelente tutorial, habia visto otros mas complicados y que no me funcionaban :(

      Pero este perfecto, pocas lineas de codigo y todo funciona como se espera, te felcito y gracias por la informacion :D xD

    26. eulises permalink
      diciembre 5, 2010 1:57 am

      como hago para que en el splahs pueda colocarle una barra en la cual balla cargando el porcentaje hasi como entra la ventana del netbeans

    27. enero 12, 2011 2:44 pm

      Hola a todos q tal, antes de usar el Splash en mi aplicacion me funcionaba bien, ahora solo corre cuando le doy en “Run” al “Main.java”, si le doy “Run Main Project(F6)” solo sale este mensaje:
      “BUILD SUCCESSFUL (total time: 0 seconds)”

      Alguien me puede ayudar con esto??
      Xq sale de una y no ejecuta?

      Creo q es xq le cambié el nombre a un package….Please ayuda….

    28. hbringas permalink
      julio 31, 2011 4:29 am

      haha 3 años en llegar aqui… PARA LOS QUE NO LES CORRA EL ERROR ESTA EN NEW VENTANA() ESTA LLAMANDO Al contrusctor pero no lo abre… tendrian que poner algo asi…

      new Ventana().setVisible(true);

      y listo!

    29. octubre 7, 2011 8:56 am

      Muchas Gracias Muy util :)

    30. febrero 18, 2012 12:46 am

      Gracias amiguo sirvio de gran ayuda en mi proyecto
      :D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D:D

    31. el ferras permalink
      mayo 8, 2012 3:12 am

      hola hola me sale un error en el metodo main a la hora de poner el Thread, lo tengo asi new Thread (new Splash()).start(); y no se en que estoy maL, ayuda por favor

    32. Gera permalink
      noviembre 14, 2012 5:15 pm

      hola como o donde e sta eso de “Runnable”

    33. Nicolas permalink
      diciembre 13, 2012 3:14 am

      Muuy buen aporte.. Tengo un problema
      Ya que bueno funciona perfectamente cuando quiero abrir un frame luego de abrir el Splash, pero cuando quiero abrir un applet que es mi ventana principal me arroja error, espero su respuesta y ayuda gracias

    Trackbacks

    1. SplashScreen en Java - Foros de CHW

    Deja un comentario

    Introduce tus datos o haz clic en un icono para iniciar sesión:

    Logo de WordPress.com

    Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

    Imagen de Twitter

    Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

    Foto de Facebook

    Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

    Google+ photo

    Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

    Conectando a %s

    Seguir

    Recibe cada nueva publicación en tu buzón de correo electrónico.

    %d personas les gusta esto: