Desarrollo de Aplicaciones móviles con J2ME Parte I
diciembre 18, 2009 at 9:06 pm 1 Comentario
Este artículo pretende iniciar un proyecto móvil a través de la plataforma JAVA 2 MICROEDITION (J2ME).
Inicialmente se debe instalar el siguiente software para que funcione nuestro proyecto:
- Java 2 SDK (antes llamado JDK)
- Sun Java Wireless ToolKit
Con este software comenzaremos a desarrollar una aplicación móvil en J2ME. Como toda aplicación Java el código fuente lo generamos a través de clases y estas clases se guardan en archivos con extensión java. Las aplicaciones en J2ME cumplen el mismo estándar.
Una aplicación para móvil en J2ME se nombra MIDLet, esto debido a que heredan de la clase MIDlet que pertenecen al paquete javax.microedition.midlet.
Ahora vamos a abrir Java Wireless Toolkit.
Escogemos Nuevo Proyecto (New Project…) e ingresamos el nombre de nuestro proyecto, para mi caso lo nombraré Ejemplo1 y el nombre del MIDlet de igual forma pero todo en minúsculas:

Ahora damos clic en Crear Proyecto (Create Project), luego aparece una ventana con las opciones de configuración del
MIDlet.

Esta ventana nos muestra todas las opciones de configuración que se aplicarán al momento de compilar la aplicación. Por ahora no vamos a explicar estas opciones pero ya escribiré un artículo sobre esto. Solo daremos clic en botón OK.

La figura anterior nos muestra que el proyecto fue creado en la carpeta C:\Users\Aimer\j2mewtk\2.5.2\apps\Ejemplo1 (la carpeta 2.5.2 puede cambiar de acuerdo a la versión del Sun Java Wireless Toolkit que hayamos instalado).
Dentro de esta carpeta se crearon las carpetas:
src (Sources): Aquí vamos a crear todos las clases que se necesitan para que funcione nuestra aplicación.
res (resources): Aquí van los archivos de recursos como imágenes, iconos, etc.
lib (library): Aquí van los archivos de librerías que necesite nuestro proyecto.
Ya en este momento vamos a iniciar la programación de nuestro MIDlet:
Primero vamos a crear un archivo nuevo con el nombre ejemplo1.java en la carpeta src de nuestro proyecto:

Editamos el archivo ejemplo1.java y comenzamos por declarar las librerías que necesitamos para funcione el MIDlet:
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
Luego realizamos la declaración de la clase de nuestro proyecto;
public class ejemplo1 extends MIDlet implements CommandListener {
Aqui estamos declarando la clase ejemplo que hereda de la clase MIDlet (esta clase le permite al compilador de java que es una aplicación movil), la clase ejemplo implementa la clase CommandListener el cual permite escuchar peticiones de los objetos Command.
Tener en cuenta que el nombre de la clase debe ser igual al nombre del archivo, en este caso como el nombre del archivo es ejemplo1.java nuestra clase debe ser ejemplo1. Luego de esto debemos declarar tres métodos que son obligatorios para que el MIDlet funcione:
public void startApp() {
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
Vamos a detenernos aquí para explicar la función de cada uno de estos métodos:
startApp(): este método se ejecuta al iniciar el MIDlet.
pauseApp(): coloca en estado pausado el MIDlet, no es muy usado pero debe declararse.
destroyApp(boolean unconditional): Finaliza el MIDlet, lo usamos para terminar la ejecución del
MIDlet y liberar la los recursos utilizados.
Nuestra aplicación móvil va a mostrar un mensaje de bienvenida en la pantalla del celular y un botón para finalizar la
aplicación:
Para esto debemos utilizar los objetos Form y Command y lo vamos a programar en el metodo startApp():
public void startApp() {
Display display = Display.getDisplay(this);
Form formulario = new Form(“Bienvenido”);
cmdExit = new Command(“Salir”, Command.EXIT, 0);
formulario.append(“Bienvenidos al Blog de Aimer”);
formulario.addCommand(cmdExit);
formulario.setCommandListener(this);
display.setCurrent(formulario);
}
Veamos cada una de las líneas de código ingresado:
Display display = Display.getDisplay(this);
Se declara el objeto display a partir de la clase Display, este objeto hace referencia a la pantalla de un dispositivo móvil, es necesario para mostrar objetos en la pantalla.
Form formulario = new Form(“Bienvenido”);
Se declara el objeto formulario a partir de clase Form, este objecto es un contenedor de objetos como TextField, Image, List, Command, el crearlo recibe el parámetro de titulo (caption) Bienvenido.
cmdExit = new Command(“Salir”, Command.EXIT, 0);
Se crea el objeto cmdExit a partir de la clase Command, el cual es un botón de comando, al momento de crearlo recibe el parametro titulo (Caption) “Salir”, el segundo parámetro es el tipo de botón Command.EXIT, el tercer parámetro es un entero que estipula la prioridad del botón. En el próximo articulo explicaré con mayor detalle la clase Command.
formulario.append(“Bienvenidos al Blog de Aimer”);
Esta instrucción agrega un String al formulario, es como si agregáramos una etiqueta (label).
formulario.addCommand(cmdExit);
Con esta instrucción agregamos el objeto cmdExit que es de tipo Command.
formulario.setCommandListener(this);
Esta línea hace referencia que cada vez que en nuestro MIDlet agreguemos objetos Command debemos implementar la interfaz CommandListener, esta interfaz solo incluye el metodo CommandAction(Command c, Displayed d) en donde indicaremos la acción que se realizará cuando se seleccione un botón, en este caso el objeto cmdExit.
display.setCurrent(formulario);
Esta instrucción permite que el objeto display muestre el objeto formulario de tipo Form.
Una vez programado el metodo startApp() seguimos con el metodo CommandAction() que se implementa a través de la interfaz CommandListener.
public void commandAction(Command c, Displayable d) {
if (c == cmdExit) {
destroyApp(true);
notifyDestroyed();
}
}
Cada vez que se seleccione un botón en el MIDlet se ejecutará este método que recibe como parámetro el botón seleccionado y el objeto display del que fue llamado. Aquí simplemente se pregunta si el botón seleccionado es cmdExit, si es así finalice la aplicación con destroyApp(trae) y notifique su finalización al recolector de recursos de la maquina virtual con notifyDestroyed().
Ya con este terminamos la programación de la clase ejemplo1 y quedaría de la siguiente manera:
/*
Archivo ejemplo1.java
*/
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class ejemplo1 extends MIDlet implements CommandListener {
private Command cmdExit;
public void startApp() {
Display display = Display.getDisplay(this);
Form formulario = new Form(“Bienvenido”);
cmdExit = new Command(“Salir”, Command.EXIT, 0);
formulario.append(“Bienvenidos al Blog de Aimer”);
formulario.addCommand(cmdExit);
formulario.setCommandListener(this);
display.setCurrent(formulario);
}
public void pauseApp() {
}
public void destroyApp(boolean unconditional) {
}
public void commandAction(Command c, Displayable d) {
if (c == cmdExit) {
destroyApp(true);
notifyDestroyed();
}
}
}
Bueno, ahora se pregunta como prueban que funcione bien su aplicación, para esto vamos a compilar a través de Sun Java Wireless Toolkit en la opción Build:

Si todo sale bien debe salir Building “Ejemplo1” y Build complete. Si salen errores deben verificar el código que genera para revisar la línea de código.
Luego de compilar escogemos la opción Run para verificar que la aplicación funcione bien en el emulador de Sun Java Wireless Toolkit.
Espero este articulo les pueda ayudar en sus inicios con la programación móvil con J2ME.
Entrada archivada en:Programación Móvil. Etiquetas:aplicacion movil, j2me, java, móvil, midle.
1 comentario Añade el tuyo
Deja un comentario
Trackback este articulo | Suscríbete a los comentarios vía RSS Feed



1.
Boris | julio 6, 2010 a las 11:12 pm
El Build lo hace Bien.
Al ejecutar, me sale este Error:
Project settings saved
Building “Ejemplo1″
Build complete
Running with storage root DefaultColorPhone
Running with locale: Spanish_Colombia.1252
Running in the identified_third_party security domain
New version Java(TM) Platform Micro Edition SDK 3.0 is available at: http://java.sun.com/javame/downloads/sdk30.jsp
Uncaught exception java/lang/NoClassDefFoundError: Ejemplo1.
Uncaught exception java/lang/NoClassDefFoundError: Ejemplo1.
Uncaught exception java/lang/NoClassDefFoundError: Ejemplo1.
Execution completed.
3782541 bytecodes executed
22877 thread switches
1669 classes in the system (including system classes)
18198 dynamic objects allocated (551764 bytes)
2 garbage collections (461148 bytes collected)
Running with storage root DefaultGrayPhone
Running with locale: Spanish_Colombia.1252
Running in the identified_third_party security domain
Uncaught exception java/lang/NoClassDefFoundError: Ejemplo1.