martes, 22 de julio de 2008

Aplicaciones Java (I): Applets y Java Web Start

Aplicaciones Java

Vamos a comentar una forma muy sencilla de desarrollar aplicaciones multiplataforma que se pueden ejecutar sin necesidad de instalar nada.

Para ello utilizaremos un conjunto de clases desarrolladas para programar interfaces: Swing. Gracias a Swing podremos crear ventanas, botones, campos de texto, selectores de fichero, y cualquier control que necesitemos para nuestra interfaz

Aplicaciones de escritorio, Aplicaciones Java Web Start y Applets

Tenemos 3 formas de ejecutar una aplicación desarrollada en Java, en función de cómo haya sido desarrollada.

Aplicaciones de escritorio

En este caso nos descargamos la aplicación a nuestra máquina local, generalmente en un fichero ".jar", o un zip conteniendo un fichero ".jar". Ejecutaremos la aplicación por medio del binario "java":
java -cp FICHERO_JAR NOMBRE_CLASE
java -cp SwingSample.jar org.dreamcoder.SwingSample.SwingSampleApp

También se puede ejecutar por medio de un script (unix shell script ".sh", DOS batch ".bat" o Windows command ".cmd", VBScript, etc), que lance el comando anterior.

Si el fichero jar se ha creado con la entrada correspondiente en el fichero META-INF/MANIFEST.MF, será posible ejecutar la aplicación directamente, pulsando el botón derecho y "Open with Sun Java * Runtime", o mediante la línea de comandos:
java -jar SwingSample.jar

Entrada del fichero MANIFEST.MF:
Main-Class: CLASE A INVOCAR QUE CONTIENE LA FUNCION MAIN
Main-Class: org.dreamcoder.SwingSample.SwingSampleApp

Applets

Con unos pequeños cambios en el código, y unas limitaciones por motivos de seguridad, podemos convertir nuestra aplicación de escritorio en un Applet. Esto quiere decir que la aplicación se ejecutará dentro de un navegador web, directamente desde Internet, sin instalar nada. Es muy cómodo para el usuario, pero puede haber diversos problemas entre el applet y el navegador web.

Para insertar un applet en nuestra página web deberemos incluir un código similar al siguiente:

<applet code="org.dreamcoder.SwingSample.SwingSampleApplet.class" width="100%" height="100%" archive="SwingSample.jar">Java Applet Support Required</applet>

Ejecutar aplicación como applet: Start Applet

Java Web Start

Éste es un nuevo modo de iniciar aplicaciones que se introdujo con Java 1.2 como un complemento que debías descargar por separado, y a partir de la versión 1.4 ya viene de serie con la instalación base.

La idea es similar a los applets, dado que desde una página web podremos directamente ejecutar nuestro programa. La principal diferencia consiste en que nuestro programa se ejecutará como un proceso independiente del navegador, aislándonos así de muchos problemas. A nuestra máquina se descargará un fichero jnlp, que es un pequeño fichero de texto que indica cómo ejecutar la aplicación.

Con este método se pueden ejecutar aplicaciones que hayan sido desarrolladas como aplicaciones de escritorio tanto como applets. Éste es el método actualmente recomendado por Sun.

Vemos aquí un ejemplo de un fichero jnlp que nos permitirá ejecutar una aplicación Java desde la web, utilizando Java Web Start:

<?xml version="1.0" encoding="utf-8"?>

<jnlp codebase="http://nightearth.com/dreamcoder/SwingSample/SwingSample_initial" href="SwingSample.jnlp">
 <information>
  <title>Swing sample JWS application</title>
  <vendor>dreamcoder.org</vendor>
  <description>Small application that doesn't do anything, just shows how to implement a multiplatform application</description>
  <homepage href="http://www.dreamcoder.org"/>
  <description kind="short">Swing sample JWS application</description>
  <offline-allowed/>
 </information>
 <resources>
  <jar href="SwingSample.jar" />
  <j2se version="1.4+" href="http://java.sun.com/products/autodl/j2se" />
 </resources>
 <application-desc main-class="org.dreamcoder.SwingSample.SwingSampleApp"/>
</jnlp>

Ejecutar aplicación vía Java Web Start: Launch via Java Web Start

Para ejecutar un applet via JWS sustituiremos el elemento application-desc por:

<applet-desc name="SwingSample" main-class="org.dreamcoder.SwingSample.SwingSampleApplet" width="768" height="576"></applet-desc>

Punto de entrada (JFrame, JApplet)

Dependiendo de si queremos desarrollar una aplicación o un applet, deberemos hacer uso de la clase JFrame o JApplet. En cuanto a la implementación, no hay muchas más diferencias. Para nuestros ejemplos, vamos a crear un wrapper de cada tipo, con lo que nuestra aplicación podrá ser ejecutada como applet, como aplición offline, o como aplicación online via Java Web Start, utilizando el mismo fichero jar.

SwingSampleApp.java

Utilizado para la ejecución como aplicación offline y Java Web Start.

package org.dreamcoder.SwingSample;

import javax.swing.JFrame;

public class SwingSampleApp
{
 public static void main(String[] args)
 {
  JFrame frame = new JFrame();
  new SwingSampleBase(frame);
  frame.pack();
 }
}

SwingSampleApplet.java

Utilizado para la ejecución como applet.

package org.dreamcoder.SwingSample;

import javax.swing.JApplet;

public class SwingSampleApplet extends JApplet
{
 private static final long serialVersionUID = 1;
 SwingSampleBase app;
 
 public void init()
 {
  if (app == null)
   app = new SwingSampleBase(this);
 }
}

SwingSampleBase.java

fichero principal de la aplicación, que será utilizado tanto desde el applet como desde la aplicación.

package org.dreamcoder.SwingSample;

import java.awt.Container;
import javax.swing.JLabel;

public class SwingSampleBase
{ 
 // Main element
 Container root;
 
 // Interface
 JLabel     lHolaMundo;

 public SwingSampleBase(Container providedRoot)
 {
  root = providedRoot;
  generaInterfaz();

  root.setVisible(true);
 }

 public void generaInterfaz()
 {
  root.add(new JLabel("Hola mundo!"));
 }
}

Descargar el código: Download

Esto es sólo el esqueleto, donde probamos los métodos para desarrollar y ejecutar una aplicación. En próximos posts le añadiremos contenido a la aplicacion.

Podríais comentar qué tal os funciona la aplicación, cuando intentáis ejecutarla como Applet, vía Java Web Start, o ejecutándola localmente, una vez descargada al disco duro? Así como Sistema Operativo, versión de la JVM (máquina virtual java) y navegador web. Gracias!!!

2 comentarios:

Unknown dijo...

Hola, soy un poco novato con net beans y no logro ejecutarla con el arcchivo jnlp. podrás darme una eplicacion paso por paso? te lo agradeceria montones.


mi correo es miguel.jimenez@z-graphics.us


muchisimas graccias

Unknown dijo...

Por si no me expliqué bien quisiera saber como pasar de una aplicacion de escritorio a web, creo que seria mejor utilizar el applet pero no entiendo mucho lo que explicas.