miércoles, noviembre 29, 2006

Post Nro 13 - Java NO genera ejecutables (.EXE)

Bienvenidos al post nro. 13. En realidad el número no me provoca ningún tipo de sentimiento en especial, lo que me preocupaba es que ya pasó una semana desde el último post y no estaba para nada creativo.

Este tema no lo daba en ningún curso hasta que un alumno me lo hizo notar (gracias Fede, alias Kal-El) y comprendí la importancia que tiene, especialmente en los cursos iniciales. El objetivo era saber si se podía correr una aplicación Java en un pendrive.
Bien, todo parte de que Java no genera ejecutables de ningún tipo, recuerden que lo único generado es código intermedio (bytecode), es decir, archivo con extensión .class.
Existen 2 formas de hacer correr una aplicación Java en una máquina distinta en la que se desarrolló, pero antes, sea cual sea la forma en que la despliegue, necesito:
  1. Tener acceso al JRE: hago hincapié en que no dije "instalar", basta con tener acceso a un directorio que contenga el JRE, más precisamente, al archivo java.exe (en windows) o java (en linux).
  2. Empaquetar mi aplicación en uno o varios JAR (Java ARchive, más detalles en próximos posts). Si bien este punto no es necesario, es muy recomendable.
Forma 1 - Chapada a la antigua

Esta primer forma consiste en correr la aplicación por medio de la línea de comandos (antiguo DOS). Esta forma es más habitual para los usuarios Linux. Consiste en lo siguiente:
Si nuestra aplicación se llama MiPrograma.jar y quiero correrla desde la línea de comandos, necesitaré escribir lo siguiente:
C:>\\java -jar MiPrograma.jar
Esto hará que se ejecute la aplicación (si está bien empaquetada). Este comando se puede escribir en un archivo con extensión .bat/.sh para poder tener un acceso directo y hacerlo un poco más visual.

Forma 2 - Creación a mano de un archivo .exe


Podríamos hacer uso de otro lenguaje que sí genere código ejecutable (VB, C, C++, Pascal, etc.) para que se invoque automáticamente a la línea de comandos y se ejecute la aplicación, o, podríamos utilizar un programa que lo haga por nosotros.
De este tipo de programas hay varios, pero me interesa uno en especial, aunque todavía es beta, tiene muy buen funcionamiento y me ha servido mucho, se llama JSmooth y pueden descargarlo del siguiente link.

El primer proyecto que se arma con este programa suele ser un poco complicado, por eso voy a dejar un pequeño tutorial de cómo usarlo.
Lo que tiene de bueno este programa es que se puede generar un ejecutable que contenga a la aplicación o que utilice un jar serparado, además, se puede configurar ampliamente la máquina virtual de Java, incluso se puede añadir mensajes específicos al usuario para que la instale.
Como si eso fuera poco, es posible incorporar todo el JRE de Java para que la aplicación la utilice accediendo a un directorio específico. Eso está muy bueno, ya que pueden prescindir de obligar al usuario que instale el JRE, directamente lo podemos distribuir con nuestra aplicación.

De esta manera, podemos crear un .exe (entorno Windows) sin muchos problemas, incluso podemos correr la aplicación directamente desde un CD o un pendrive. Muy recomendable.

Links:

Tutorial: (PDF)
JSmooth: http://jsmooth.sourceforge.net/
Launch4j: http://launch4j.sourceforge.net/

Saludos PF

4 Comments:

At 12:13 p. m., Anonymous Anónimo said...

hola pablo,
he echo una pekeña aplicacion Java que quiero distribuir, para ello he creado un EXE utilizando Jsmooth(a raiz de este post:D), en el classpath de la ventana de jsmooth indico el directorio donde se encuentran todas las clases de la aplikacion e indico la clase principal.
sin embargo, al compilar mi proyecto me devuelve "compilacion nula¡¡", ¿¿que estoy haciendo mal??

gracias pablo, un saludo:D

 
At 6:02 p. m., Anonymous Anónimo said...

Hola Pablo. Soy Miguel Canl y estudio Ing en Computación en la Universidad Nacional de Tucuman, en 4to año. Realmente encontre este blog sumamente util ya que estoy comenzando hace unos meses a programar en java. Lo lei completamente. Te queria hacer 2 pedidos. El primero es si puedes enviarme por mail el tutorial de JSmooth ya que el link no anda, mi mail es miguelcanal@gmail. El segundo pedido seria mas que nada que me des una manito.
Estoy interesado en SwingWorker pero aun no aprendí mucho al respecto. Quisiera que el Worker se encargue de mostrar una pequeña ventana que diga: CARGANDO... mientras mi aplicacion java se carga y realiza la conexion con la base de datos. ¿Tienes algun ejemplo que me pueda ayudar a mostrar esta ventanita? Mi mayor duda es como hacer para que desaparesca automaticamente y como implementarla con un worker.

Muchisimas gracias de antemano.
Admiro mucho tu trabajo en el blog, ojalá hubiera muchos como el tuyo.

 
At 8:38 p. m., Blogger Pablo Frias said...

Gracias por avisar, ya está arreglado el link.

Saludos

 
At 3:57 p. m., Blogger Chipilofan said...

si puedieras aclarar mejor este tutorial, sera fantastico, mira el problema en si es este, creo que todos los que buscan informacion sobre esto en realidad desearian saber esto. Ejemplo: tengo mi text.java - text.class (lo que genera el netbeans) ahora convertirlo a text.exe, haber si lo dejo en claro, ya que ustedes hablan de .jar, este seria otro tipo de archivo!!! explicalo mejor sale, esperare tu respuesta...

 

Publicar un comentario

<< Home