Desarrollo para Aplicaciones Móviles en j2me

¿Què es j2me?
• Es una versión reducida de J2SE dado que tiene unas ciertas limitaciones o diferencias respecto a éste. • Java2 Micro Edition ha sido creado para adaptarse a las características de los nuevos dispositivos inalámbricos tales como teléfonos móviles y PDAs. • Puede ubicar la ayuda en esta Ruta : C:\WTK2.5.2_01\docs\api\midp\index.html

J2ME
Descripción de J2ME - Origen y evolución
Por tanto, actualmente, la versión 2 de Java de Sun Microsystem contiene tres ediciones distintas: Standard Edition (J2SE): entorno básico de Java. Ofrece un conjunto de clases y APIs (Application Program Interface Interfaz para Programas de Aplicación) que permiten desarrollar y ejecutar aplicaciones clientes y servidoras, así como programas que se ejecuten en navegadores (applets). Ya está en la calle el J2SE 5.0. Enterprise Edition (J2EE): agrupa APIs Java y tecnologías que no están basadas en este lenguaje. Se aconseja para el desarrollo de aplicaciones distribuidas. Micro Edition (J2ME): específicamente diseñado para desarrollar aplicaciones para dispositivos embebidos y electrónicos, que tienen características peculiares ya que dos ediciones anteriores no son adecuadas para su utilización con ellos. Éstos dispositivos normalmente tienen una potencia limitada, posibilidad de conectividad a una red (normalmente sin cables) y poseen interfaces gráficos. En la siguiente ilustración podemos ver gráficamente la relación entre cada una de las ediciones de Java y los tipos de dispositivos con que se podrían programar:

J2ME Descripción de J2ME .Origen y evolución .

Introducción JAVA Variables y Tipos de Datos en todas las Ediciones Las variables son las partes importantes de un lenguaje de programación: ellas son las entidades (valores. Una declaración de variable siempre contiene dos componentes. datos) que actúan y sobre las que se actúa. el tipo de la variable y su nombre .

String Nombre. .Introducción JAVA Variables y Tipos de Datos en todas las Ediciones Sintaxis declaración de tipo de variable Int Edad.

En ausencia de FPU.Tipos de datos soportados • J2ME soporta hasta tipos de datos double(8) y float(4) dado que los procesadores empleados en los móviles disponen de unidad de coma flotante. la CPU puede utilizar programas en microcódigo para emular una función en coma flotante a través de la unidad aritmético-lógica (ALU). la CPU puede utilizar programas en microcódigo para emular una función en coma flotante a través de la unidad aritmético-lógica (ALU). coprocesador matemático. la cual reduce el coste del hardware a cambio de una sensible pérdida de velocidad • • • • . si bien algunos sistemas más complejos son capaces también de realizar cálculos trigonométricos o exponenciales. si bien algunos sistemas más complejos son capaces también de realizar cálculos trigonométricos o exponenciales. es un componente de la CPU especializado en el cálculo de operaciones en coma flotante. más comúnmente conocido como. No todas las CPUs tienen una FPU dedicada. Una Unidad de Punto Flotante o Unidad de Coma Flotante (Floating Point Unit en inglés) o. más comúnmente conocido como. En ausencia de FPU. la cual reduce el coste del hardware a cambio de una sensible pérdida de velocidad Una Unidad de Punto Flotante o Unidad de Coma Flotante (Floating Point Unit en inglés) o. No todas las CPUs tienen una FPU dedicada. Las operaciones básicas que toda FPU puede realizar son las aritméticas (suma y multiplicación). coprocesador matemático. Las operaciones básicas que toda FPU puede realizar son las aritméticas (suma y multiplicación). es un componente de la CPU especializado en el cálculo de operaciones en coma flotante.

Operadores .

Operadores .

Operadores .

Operadores .

out. .println Es la salida estándar de datos o impresión .out.Comando System.println("Salida a la consola"). Con ella enviamos información a la consola: Ejemplo System.

Sentencias de Control de Flujo La sentencia if-else .

Sentencias de Control de Flujo . supon que tu programa contiene un entero llamado mes cuyo valor indica el mes en alguna fecha.La sentencia switch La sentencia switch se utiliza para realizar sentencias condicionalmente basadas en alguna expresión. Supon que también quieres mostrar el nombre del mes basándose en su número entero equivalente. Podrías utilizar la sentencia switch de Java para realizar esta tarea: . Por ejemplo.

. una sentencia while realiza una acción mientras se cumpla una cierta condición.Sentencias de Control de Flujo Sentencias de Bucle Generalmente hablando. La sintaxis general de la sentencia while es: while (expresión) sentencia Por convención el corchete abierto '{' se coloca al final de la misma línea donde se encuentra la sentencia while y el corchete cerrado '}' empieza una nueva línea indentada a la línea en la que se encuentra el while.

Por ejemplo. su criterio de terminación y su instrucción de incremento). el bucle for se utiliza frecuentemente para iterar sobre los elementos de un array. . Puedes utilizar este bucle cuando conozcas los límites del bucle (su instrucción de inicialización.Sentencias de Control de Flujo Sentencias for Primero el bucle for. o los caracteres de una cadena.

el bucle do-while.que es similar al bucle while que se vio al principio.Sentencias de Control de Flujo Sentencias do-while Java proporciona otro bucle. excepto en que la expresión se avalú al final del bucle: .

Sentencias de Control de Flujo Sentencias Return .

Por ejemplo. el tipo de dato para un array que sólo va a contener elementos enteros es un array de enteros.Arrays y Cadenas (Arrays) Esta sección te enseñará todo lo que necesitas para crear y utilizar arrays en tus programas Java. int[] arraydeenteros = new int[10] . Aquí tienes la declaración de un array de enteros: int[] arrayDeEnteros. al igual que otras variables. De nuevo. La declaración no asigna ninguna memoria para contener los elementos del array. No puede existir un array de tipo de datos genérico en el que el tipo de sus elementos esté indefinido cuando se declara el array. antes de poder utilizar un array primero se debe declarar. la declaración de un array tiene dos componentes primarios: el tipo del array y su nombre. Como otras variables. La siguiente sentencia asigna la suficiente memoria para que arrayDeEnteros pueda contener diez enteros. La parte int[] de la declaración indica que arrayDeEnteros es un array de enteros. Un tipo de array incluye el tipo de dato de los elementos que va contener el array.

se añade corchetes cuadrados al nombre del array. j < arrayDeEnteros.length.println("[j] = " + arrayDeEnteros[j]). para referirse a un elemento del array. System. Observa que en Java. j ++) { arrayDeEnteros[j] = j.Arrays y Cadenas (Arrays) Asignando Valores al Arreglo Ahora que se ha asignado memoria para un array ya se pueden asignar valores a los elemetos y recuperar esos valores: for (int j = 0. Entre los corchetes caudrados se indica (bien con una variable o con una expresión) el índice del elemento al que se quiere acceder.out. } Como se puede ver en el ejemplo anterior. . el índice del array empieza en 0 y termina en la longitud del array menos uno.

lang). Los objetos String son inmutables . StringBuffer. llamado args. El segundo uso de String es el uso de cadenas literales (una cadena de caracteres entre comillas " y "): "Hola mundo!" El compilador asigna implicitamente espacio para un objeto String cuando encuentra una cadena literal. que se podrá utilizar para crear y manipular caracteres al vuelo.Arrays y Cadenas (Strings) Una secuencia de datos del tipo carácter se llama un string (cadena) y en el entorno Java está implementada por la clase String (un miembro del paquete java. Los corchetes vacios indican que la longitud del array no se conoce en el momento de la compilación.lang proporciona una clase diferente. . que contiene objetos del tipo String. Este código declara explícitamente un array. porque el array se pasa en el momento de la ejecución.es decir. El paquete java. String[] args. no se pueden modificar una vez que han sido creados.

El segundo uso de String es el uso de cadenas literales (una cadena de caracteres entre comillas " y "): "Hola mundo!" El compilador asigna implicitamente espacio para un objeto String cuando encuentra una cadena literal.es decir. String[] args. Este código declara explícitamente un array. Los objetos String son inmutables . El paquete java. que contiene objetos del tipo String.lang proporciona una clase diferente.lang). que se podrá utilizar para crear y manipular caracteres al vuelo. no se pueden modificar una vez que han sido creados. . StringBuffer. llamado args. porque el array se pasa en el momento de la ejecución. Los corchetes vacios indican que la longitud del array no se conoce en el momento de la compilación.Arrays y Cadenas (Strings) Una secuencia de datos del tipo carácter se llama un string (cadena) y en el entorno Java está implementada por la clase String (un miembro del paquete java.

class”. etc . Descriptor.. versión. etc…). La finalidad del Manifesto es describir el contenido del fichero .Que mas Hay Los programas en J2ME no son “fichero. . imágenes. también se incluye en este fichero una entrada por cada MIDlet que lo compone. se denominan MIDLETs y van comprimidos en paquetes “jar” con todos los ficheros que forman parte de la aplicación (Manifesto. vendedor.JAR con información tal como el nombre.

Que es MIDLETS .

Como se Inicia una aplicacion j2me • Las aplicaciones en J2ME empiezan en el método start app. • Diagrama de estados de un MIDLET: • Estado Pausado .

Como se Inicia una aplicacion j2me
• Las aplicaciones en J2ME empiezan en el método start app. • Diagrama de estados de un MIDLET: • Estado Pausado

Como se Inicia una aplicacion j2me
• Las aplicaciones en J2ME empiezan en el método start app. • Diagrama de estados de un MIDLET: • Estado Activo

Como se Inicia una aplicacion j2me
• Las aplicaciones en J2ME empiezan en el método start app. • Diagrama de estados de un MIDLET: • Estado Activo

• Diagrama de estados de un MIDLET: • Estado Destruido .Como se Inicia una aplicacion j2me • Las aplicaciones en J2ME empiezan en el método start app.

Como se Inicia una aplicacion j2me • Las aplicaciones en J2ME empiezan en el método start app. • Diagrama de estados de un MIDLET: • Modificando estado .

Como se Inicia una aplicacion j2me .

Como se Inicia una aplicacion j2me .

Como se Inicia una aplicacion j2me .

Como se Inicia una aplicacion j2me .

Como se Inicia una aplicacion j2me .

Como se Inicia una aplicacion j2me .

Como se Inicia una aplicacion j2me .

Que es MIDLETS .

microediton.lcdui proporciona los mecanismos para desarrollar un interface de usuario. .Interface de Usuario Tecnología: Librerias CLDC • javax.

javax.midlet  Toda aplicación que quiere utilizar el perfil MIDP debe heredar de MIDLET.microediton. .Principales paquetes de J2ME (1) javax.microediton.lcdui  Paquete que proporciona los mecanismos para desarrollar un interface de usuario.

rms • J2ME MIDP define una simple base de datos de registros llamada RMS (Record Management System) con el objetivo de poder almacenar información una vez que el MIDLET finalice.microediton. Internet. es decir. javax.io • Este paquete proporciona conectividad para poder acceder a datos remotos y redes corporativas. .Principales paquetes de J2ME (2) javax.microediton.

Crear la primera aplicación Ejemplo1 .

Crea las siguientes carpetas Creamos la carpeta PROJECTOS la Unidad c: o en alguna unidad no protegida .

Ubicando el IDE a utilizar .

.Construyendo nuestra primera aplicación File – New Project…………………. .

Construyendo nuestra primera aplicación .

Construyendo nuestra primera aplicación Observar el nombre del proyecto y la ruta indicada .

Construyendo nuestra primera aplicación .

sino que trata de agrupar un amplio conjunto de dispositivos en relación a sus capacidades computacionales y entorno genérico de operación. Mediante la configuración se especifica un conjunto de características soportadas del lenguaje Java y un conjunto mínimo de características de la JVM.Construyendo nuestra primera aplicación CLDC Una configuración se podría definir como un conjunto mínimo de API´s básicas que permiten desarrollar aplicaciones destinadas a un amplio rango de dispositivos.O no lo soporta . La configuración no está relacionada con el tipo de aplicación que se quiere crear.1 soporta coma flotante y CLDC 1. La diferencia mas notable que CLDC 1.

Construyendo nuestra primera aplicación MIDP es el acrónimo de Perfil para dispositivos de información móvil (Mobile Information Device Profile) y nos proporciona un perfil que se apoya en CLDC y que nos va a proporcionar los paquetes y clases necesarios para el desarrollo de nuestras aplicaciones. por lo que es también utilizable en casi cualquier PDA. aunque existe una implementación para PalmOS (versión 3.5 y superiores) y PocketPC. . MIDP está orientado principalmente a teléfonos móviles.

Bien es cierto que es posible realizar juegos con MIDP 1. Mejor aprovechar lo que ya tenemos. Siempre es posible hacer tus propias clases imitando la clase games. y a un nivel un poco más alto. claro. en este tutorial nos vamos a centrar en MIDP 2. pero ahí ya estamos hablando de otra cosa. . que facilita muchísimo la tarea de realizar juegos con gráficos.Construyendo nuestra primera aplicación La una de las grandes novedades de MIDP 2 son las clases games.

Construyendo nuestra primera aplicación .

Construyendo nuestra primera aplicación .

puedes consultar la bibliografía en los apéndices de este libro. . El nombre guarda cierta similitud (no casual) con los programas capaces de correr en un navegador (applets).Algún Concepto Importante MIDlet Un MIDlet es un programa capaz de correr en un dispositivo móvil. Si quieres ampliar conocimientos sobre el •lenguaje Java.

Veremos que aparece ya un package. Si activásemos el Midlet a secas. Pulsamos sobre él con el botón derecho del ratón. denominado “Default package”. y seleccionamos el nuestro. pues parte de su código no es modificable por el usuario • • • • .El primer Midlet J2ME en NetBeans • • • Vamos al tree de la parte izquierda. en “Projects”. solamente podremos trabajar en código con él. algo que no es muy acertado en el IDE de NetBeans. para que nos realice el esqueleto de un Midlet en el cual podremos trabajar visualmente. y seleccionamos “New/Visual Midlet”.

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans ¿Que es el Constructor de una clase? Es aquella que posee el mismo nombre de la clase a la cual pertenece y no puede regresar ningún valor (ni siquiera se puede especificar la palabra reservada void). Por ejemplo si añadiéramos a la clase Hola un constructor. ahora crearemos el constructor de la clase Hola . java asume uno por defecto. tendríamos que llamarlo también Hola. Cuando en una clase no se escribe propiamente un constructor.

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

campos de texto editable .crear una variable tipo Formulario (donde declaramos la variable pantalla ): private Form Formulario1. campos de texto de sólo lectura .El primer Midlet J2ME en NetBeans ¿Que es un Formulario? Un Forma es una Pantalla que contiene una mezcla arbitraria de elementos : imágenes. Creación del primer Formulario 1. 2. los campos editables fecha choice groups y custom items..crear una variable tipo Formulario ( dentro del constructor ): // instanciamos el formulario Formulario1 = new Form(“HolaAmigos"). ..

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

El primer Midlet J2ME en NetBeans .

Sólo puede estar en un estado a la vez. sin tener que estar todos ejecutándose en el mismo entorno.midlet.El primer Midlet J2ME en NetBeans En la introducción dijimos que un midlet siempre heredará de la clase javax. empezar. Activo o Destruido. parar y destruir un Midlet. El ciclo de vida de un midlet se compone de lo siguientes estados: Pausado.MIDlet.microedition. que va a permitir a nuestro dispositivo poder manejar múltiples Midlets. Los métodos de esta clase permiten a nuestra aplicación crear. El sistema de nuestro dispositivo puede seleccionar que Midlet está activo usando los métodos correspondientes para empezar o pausar. estos métodos son la interfaz del Midlet. La figura 1 muestra como se pasa de uno a otro .

inicialmente pasa al estado Pausado. es el sistema quien pasa nuestro Midlet de Activo a Pausado y viceversa. se destruye. . cuando. por ejemplo. que luego veremos). El midlet puede pasar de Activo a Pausado. entonces se realiza la inicialización de la clase (método startApp().El primer Midlet J2ME en NetBeans Cuando un midlet ser carga en memoria. recibimos una llamada en nuestro móvil. Un Midlet puede ser lanzado y parado todas las veces que queramos. pero sólo puede ser destruido una vez. Si el Midlet lanza una excepción durante la ejecución de su constructor.

Command. } } } .import javax.microedition. Displayable s) { // Salir if (c == exitCommand) { destroyApp(false).import javax.Display. notifyDestroyed(). } //Método que se llama cuando pasamos de Activo a Pausado protected void pauseApp( ) { } //Método que se llama cuando se destruye el midlet protected void destroyApp(boolean incondicional) { } public void commandAction(Command c.microedition.addCommand(exitCommand).EXIT.Displayable.microedition.lcdui. // Añadimos el comando Salir e indicamos que clase lo manejará screen. } //Método que se llama cuando pasamos de Pausado a Activo protected void startApp( ) { // Seleccionamos la pantalla a mostrar display. exitCommand = new Command("Salir".Form.append(saludo).lcdui.lcdui. // Creamos y añadimos la cadena de texto a la pantalla StringItem saludo = new StringItem("".import javax..lcdui.microedition. // Creamos la pantalla principal (un formulario) screen = new Form("HelloWorld"). screen.setCommandListener(this). // Creamos el comando Salir.getDisplay(this).El primer Midlet J2ME en NetBeans //Usamos la clase MIDlet import javax. //Nuestra clase debe de heredar de la clase MIDlet public class Hola extends MIDlet implements CommandListener { private Command exitCommand..StringItem.setCurrent(screen).import javax. private Form screen. import javax.midlet.2). screen.microedition.microedition. display = Display.Command.CommandListener.import javax."). private Display display."Hola Mundo. //Constructor.lcdui.microedition.lcdui.*. si no lo ponemos (está vacío) ya lo hará Java por nosotros public Hola( ) { // Obtenemos el objeto Display del midlet.