9.3 JAR EJECUTABLES

 

Hola a todos, ¿Qué tal? Hasta ahora hemos visto como empaquetar nuestras aplicaciones en un archivo JAR y como firmarlas.

En este apartado vamos a ver cómo crear un ejecutable, es muy similar a como se empaquetan los archivos JAR.

Cuando creamos el archivos ejecutable en Windows tendrá formato .exe, en Linux formato .deb, en Solaris .elf y en MacOs .app. Da igual en el sistema operativo donde ejecutemos el archivo, cada sistema operativo lo ejecutará con su formato correspondiente.

Seguimos con el ejemplo de la Calculadora que hemos estado utilizando hasta ahora. En Eclipse vamos al menú File y Export:

Nos aparece la siguiente ventana, tenemos que seleccionar Runnable JAR file:

Pulsamos en el botón Next, en la siguiente ventana tenemos que elegir la clase y el proyecto y donde lo queremos guardar, por lo demás no es necesario modificar nada.

Pulsamos el botón Finish nos aparece la siguiente ventana con información adicional pero no significa que tenga errores:

Pulsamos el botón OK, vamos a la carpeta donde hemos guardado este archivo ejecutable y lo ejecutamos:

El proceso es similar a cuando empaquetamos archivos JAR.

En este caso no ha habido ningún problema para crear el ejecutable, sin embargo, en aplicaciones que utilizan recursos externos, como imágenes al crear el ejecutable los recursos externos no los tienes en cuenta, no los incluye.

Vamos a verlo en este ejemplo, nos creamos un nuevo proyecto al que vamos a llamar Colores y dentro de este proyecto vamos a crearnos la siguiente clase MultiplesFuentes con la que ya hemos trabajado anteriormente, el código completo es el siguiente:

import java.awt.Color;

import java.awt.event.ActionEvent;

 

import javax.swing.*;

 

public class MultiplesFuentes {

 

       public static void main(String[] args) {

           

             MarcoFuentes mimarco=new MarcoFuentes();

           

             mimarco.setVisible(true);

           

             mimarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

 

       }

 

}

 

class MarcoFuentes extends JFrame{

     

       public MarcoFuentes() {

           

             setTitle("Práctica MarcoFuentes");

           

             setSize(400, 400);

           

             LaminaFuentes milamina =new LaminaFuentes();

           

             add(milamina);

           

       }

}

 

class LaminaFuentes extends JPanel{

    public LaminaFuentes() {

       

        ActionColor accionAmarillo = new ActionColor("Amarillo", new ImageIcon("bin/bola_amarilla.gif"), Color.yellow);

        ActionColor accionAzul = new ActionColor("Azul", new ImageIcon("bin/bola_azul.gif"), Color.blue);

        ActionColor accionRojo = new ActionColor("Rojo", new ImageIcon("bin/bola_roja.gif"), Color.red);

       

        add(new JButton(accionAmarillo));

        add(new JButton(accionAzul));

        add(new JButton(accionRojo));

       

        InputMap mapaEntrada = getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW);

       

        KeyStroke teclayellow = KeyStroke.getKeyStroke("ctrl Y");

       

        KeyStroke teclablue = KeyStroke.getKeyStroke("ctrl B");

       

        KeyStroke teclared = KeyStroke.getKeyStroke("ctrl R");

       

        mapaEntrada.put(teclayellow, "fondo_amarillo");

       

        mapaEntrada.put(teclablue, "fondo_azul");

       

        mapaEntrada.put(teclared, "fondo_rojo");

       

        ActionMap mapaAccion = getActionMap();

       

        mapaAccion.put("fondo_amarillo", accionAmarillo);

       

        mapaAccion.put("fondo_azul", accionAzul);

       

        mapaAccion.put("fondo_rojo", accionRojo);

 

 

 

 

  }

   private class ActionColor extends AbstractAction {

     

        public ActionColor(String nombre, Icon icono, Color color_boton) {

           

            putValue(Action.NAME, nombre);

           

            putValue(Action.SMALL_ICON, icono);

          

            putValue(Action.SHORT_DESCRIPTION, "Rellenar el fondo de color" + nombre);

          

            putValue("color_de_fondo", color_boton);

 

           

        }

 

 

      @Override

      public void actionPerformed(ActionEvent e) {

           

            Color c = (Color)getValue("color_de_fondo");

           

            setBackground(c);

           

      }

     

    }

 

}

Si probamos se ejecuta la siguiente ventana:

Si pulsamos en alguno de estos tres botones, por ejemplo, el amarillo, el fondo de la ventana se rellena del color amarillo:

Tiene tres recursos externos que son las imágenes de los botones:

Vamos a crear el archivo ejecutable tal y como hemos hecho con la Calculadora:

Al pulsar el botón Finish nos ha creado el archivo ejecutable con el nombre que le hemos dado.

Si lo ejecutamos:



La aplicación funciona, si pulsamos en cualquier botón:



Sin embargo, no ha tenido en cuenta las imágenes, no las ha incluido.

Para que las tenga en cuenta tenemos que modificar el código, abrimos el archivo, tenemos que utilizar la clase URL por lo que hay que importar el paquete java.net y el método getResource donde va a estar la ruta:

URL color_amarillo = LaminaFuentes.class.getResource("bin/bola_amarilla.gif");

        ActionColor accionAmarillo = new ActionColor("Amarillo", new ImageIcon(color_amarillo), Color.yellow);

        URL color_azul = LaminaFuentes.class.getResource("bin/bola_azul.gif");

        ActionColor accionAzul = new ActionColor("Azul", new ImageIcon(color_azul), Color.blue);

        URL color_rojo = LaminaFuentes.class.getResource("bin/bola_rojo.gif");

        ActionColor accionRojo = new ActionColor("Rojo", new ImageIcon(color_rojo), Color.red);

Volvemos a ejecutar el archivo para que nos cree el archivo .class. Volvemos a crear el archivo ejecutable, una vez creado pulsamos sobre él:

Sigue sin aparecer las imágenes de los botones ya que nos falta un paso adicional, abrimos el archivo con el winrar, por ejemplo, añadimos las imágenes:



De esta forma si lo ejecutamos ya se muestran las imágenes de los botones:

Si tenéis dudas ya sabéis que podéis hacérmelo llegar a través de los comentarios del blog. Os espero en el próximo post. Hasta pronto!

9.2 FIRMAR ARCHIVOS JAR << >> 9.4 JAVA WEB START



No hay comentarios:

Publicar un comentario