Вы находитесь на странице: 1из 43

J2ME: Aplicaciones Java para Dispositivos Mviles

UNIDAD III
INTRODUCCIN A LA PLATAFORMA
J2ME
J2ME: Aplicaciones Java para Dispositivos Mviles

Master en JAVA

J2ME: Aplicaciones Java para Dispositivos Mviles

Introduccin
En la unidad anterior vimos los conceptos principales de la programacin. Esta
unidad explica como programar en el lenguaje JAVA.
ndice
3.1. Introduccin a Java
3.1.1. Estructura y caractersticas del lenguaje
3.1.2. Clases y objetos en Java
3.1.3. Control de errores y excepciones
3.1.4. Entrada / salida en Java
3.1.5. Diseo de clases propias
3.1.6. Clases fundamentales
3.1.7. Interfaces
3.2. J2ME: Arquitectura general
3.3. Origen
3.4. Principales caractersticas
3.5. Dispositivos mviles
3.5.1. Tipos de dispositivos
3.6. El entorno J2ME
3.6.1. JDK
3.6.2. Instalacin
3.7. Configuraciones y perfiles
3.8. Instalacin y uso del Wireless Toolkit de Sun
3.9. Aplicaciones bsicas en J2ME
3.9.1. La primer aplicacin para mviles

J2ME: Aplicaciones Java para Dispositivos Mviles

3.1.

Introduccin a Java

Java es un lenguaje de programacin orientado a objetos desarrollado por Sun


Microsystems a principios de los aos 90. El lenguaje en s mismo toma mucha de su
sintaxis de C y C++, pero tiene un modelo de objetos ms simple y elimina herramientas
de bajo nivel, que suelen inducir a muchos errores, como la manipulacin directa de
punteros o memoria.
El lenguaje Java fue desarrollado por Sun Microsystems en 1991. Inicialmente Java fue
creado como un lenguaje de programacin multipropsito y que funcionara no slo en
computadoras, sino en cualquier dispositivo electrnico que necesite de programacin,
desde su creacin Java mostr ser muy slido, pero no haba un medio en el cual se
poda encontrar una aplicacin real, se intent con juegos de vdeo, equipos digitales,
pero no se poda difundir, hasta que lleg la oportunidad esperada: Internet y la Word
Wide Web, el equipo de desarrollo de Java adapt este nuevo lenguaje para que
funcionara en la Web, logrando as encontrar un medio ideal para su difusin, Java surgi
como una respuesta por parte Sun Microsystems para el creciente mundo del desarrollo
de aplicaciones internet, donde haba un caos tremendo en el cual cada empresa lder
trataba de implantar su propio estndar, donde una aplicacin funcionaba en un servidor y
no en otro debido a diferencias en el sistema operativo, incompatibilidades de software y
hardware.
3.1.1 Estructura y caractersticas del lenguaje
Algunas caractersticas que nos ofrece Java respecto a cualquier otro lenguaje de
programacin, son:
Simple
Java ofrece toda la funcionalidad de un lenguaje potente. Java se dise para ser
parecido a C++ y as facilitar un rpido y fcil aprendizaje.
Java elimina muchas de las caractersticas de otros lenguajes como C++, para
mantener reducidas las especificaciones del lenguaje y aadir caractersticas muy tiles
como el garbage collector (reciclador de memoria dinmica). No es necesario
preocuparse de liberar memoria, el reciclador se encarga de ello y como es un thread de
baja prioridad, cuando entra en accin, permite liberar bloques de memoria muy grandes,
lo que reduce la fragmentacin de la memoria.
Java reduce en un 50% los errores ms comunes de programacin con lenguajes
como C y C++ al eliminar muchas de las caractersticas de stos, entre las que destacan:
aritmtica de punteros
no existen referencias
registros (struct)
definicin de tipos (typedef)
macros (#define)
3

J2ME: Aplicaciones Java para Dispositivos Mviles

necesidad de liberar memoria (free)


Orientado a objetos
Java trabaja con sus datos como objetos y con interfaces a esos objetos. Soporta
las tres caractersticas propias del paradigma de la orientacin a objetos: encapsulacin,
herencia y polimorfismo. Las plantillas de objetos son llamadas, clases y sus copias,
instancias. Estas instancias, necesitan ser construidas y destruidas en espacios de
memoria.
Java incorpora una funcionalidad llamada resolucin dinmica de mtodos. Esta
caracterstica deriva del lenguaje Objective C, propietario del sistema operativo Next. En
C++ se suele trabajar con libreras dinmicas (DLLs) que obligan a recompilar la
aplicacin cuando se retocan las funciones que se encuentran en su interior. Este
inconveniente es resuelto por Java mediante una interfaz especfica llamada RTTI
(RunTime Type Identification) que define la interaccin entre objetos excluyendo variables
de instancias o implementacin de mtodos. Las clases en Java tienen una
representacin en el runtime que permite a los programadores interrogar por el tipo de
clase y enlazar dinmicamente la clase con el resultado de la bsqueda.
Distribuido
Permite a los programadores acceder a la informacin a travs de la red con tanta
facilidad como a los ficheros locales a travs de libreras de rutinas para acceder e
interactuar con protocolos como http y ftp.
La verdad es que Java en s no es distribuido, sino que proporciona las libreras y
herramientas para que los programas puedan ser distribuidos.
Seguro
El cdigo Java pasa muchos tests antes de ejecutarse en una mquina. El cdigo
se pasa a travs de un verificador de byte-codes que comprueba el formato de los
fragmentos de cdigo y aplica un probador de teoremas para detectar fragmentos de
cdigo ilegal -cdigo que falsea punteros, viola derechos de acceso sobre objetos o
intenta cambiar el tipo o clase de un objeto-.
Si los byte-codes pasan la verificacin sin generar ningn mensaje de error,
entonces sabemos que:
El cdigo no produce desbordamiento de operandos en la pila
El tipo de los parmetros de todos los cdigos de operacin son conocidos y
correctos.
No ha ocurrido ninguna conversin ilegal de datos, tal como convertir enteros en
punteros.
El acceso a los campos de un objeto se sabe que es legal: public, private,
protected.
No hay ningn intento de violar las reglas de acceso y seguridad establecidas .
4

J2ME: Aplicaciones Java para Dispositivos Mviles

Respecto a la seguridad del cdigo fuente, no ya del lenguaje, JDK proporciona un


desemsamblador de byte-code, que permite que cualquier programa pueda ser convertido
a cdigo fuente, lo que para el programador significa una vulnerabilidad total a su cdigo.
Utilizando java no se obtiene el cdigo fuente original, pero s desmonta el programa
mostrando el algoritmo que se utiliza, que es lo realmente interesante. La proteccin de
los programadores ante esto es utilizar llamadas a programas nativos, externos (incluso
en C o C++) de forma que no sea descompilable todo el cdigo; aunque as se pierda
portabilidad. Esta es otra de las cuestiones que Java tiene pendientes.
3.1.2. Clases y objetos en Java
Todo en Java son clases (objetos). Desde un punto de vista simplista, una clase es
un conjunto de valores (atributos) junto con las funciones y procedimientos que operan
sobre los mismos (mtodos), todo ello tratado como una entidad. Estas clases constituyen
los bloques principales en los cuales se encuentra contenido el cdigo.
En un fichero fuente puede declararse una o ms clases:
class Clase1 {

}
class Clase2 {

class ClaseN {

}
El cuerpo de las clases comienza con una llave abierta ({) y termina con una llave
cerrada (}).
Declaracin de clase {
Cuerpo de clase
}
La declaracin de una clase define un tipo de dato referencial. Dentro del cuerpo de
la clase se declaran los atributos de la clase y los mtodos.
Declaracin de clase
La declaracin mnima para una clase es la siguiente:
class NombreClase
Una declaracin de este tipo indica que la clase no desciende de ninguna otra,
aunque en realidad, todas las clases declaradas en un programa escrito en Java son
5

J2ME: Aplicaciones Java para Dispositivos Mviles

descendientes, directa o indirectamente, de la clase Object que es la raz de toda la


jerarqua de clases en Java.
class ObjetoSimpleCreado {
String variable = "Una variable";
int entero = 14;
public String obtnerString() {
return variable;
}
}
class ObjetoSimple {
public static void main(String arumentos[]) {
ObjetoSimpleCreado varObj = new ObjetoSimpleCreado();
System.out.println(varObj.toString());
}
}

Muestra en pantalla la siguiente lnea de texto:


ObjetoSimpleCreado@13937d8
En este caso, la clase ObjetoSimpleCreado ha sido declarada como no
descendiente de ninguna otra clase, pero a pesar de ello, hereda de la superclase Object
(java.lang.Object) todos sus mtodos, entre los que se encuentran el mtodo toString()
que, en este caso, devuelve el siguiente valor:
ObjetoSimpleCreado@13937d8 (el nombre de la clase junto con el puntero al
objeto). Este mtodo, que heredan todas las clases que puedan declararse, debera ser
redefinido por el programador para mostrar un valor ms significativo. Si en lugar de la
instruccin System.out.println(varObj.toString()); se hubiera utilizado la siguiente:
System.out.println(
varObj.obtenerString()) la salida por pantalla habra sido:
Una variable

Una clase embebida (Inner Class) es una clase que se define dentro de otra. Es
una caracterstica de Java que permite agrupar clases lgicamente relacionadas y
controlar la 'visibilidad' de una clase. El uso de las clases embebidas no es obvio y
contienen detallas algo ms complejos que escapan del mbito de esta introduccin.
Se puede definir una clase embebida de la siguiente forma:
class Externa {
. . .
class Interna {
. . .
}
}

La clase Externa puede instanciar y usar la clase Interna como cualquier otra, sin
limitacin ni cambio en la sintaxis de acceso:
6

J2ME: Aplicaciones Java para Dispositivos Mviles


class Externa {
. . .
class Interna {
. . .
}
void metodo() {
Interna i = new Interna(. . .);
. . .
}
}

Una diferencia importante es que un objeto de la clase embebida est relacionado


siempre con un objeto de la clase que la envuelve, de tal forma que las instancias de la
clase embebida deben ser creadas por una instancia de la clase que la envuelve. Desde
el exterior estas referencias pueden manejarse, pero calificandolas completamente, es
decir nombrando la clase externa y luego la interna. Adems una instancia de la clase
embebida tiene acceso a todos los datos miembros de la clase que la envuelve sin usar
ningn calificador de acceso especial (como si le pertenecieran). Todo esto se ve en el
ejemplo siguiente.
Ejemplo
Un ejemplo donde puede apreciarse fcilmente el uso de clases embebidas es el
concepto de iterador. Un iterador es una clase diseada para recorrer y devolver
ordenadamente los elementos de algn tipo de contenedor de objetos. En el ejemplo se
hace una implementacin muy elemental que trabaja sobre un array.
class Almacen {
private Object [] listaObjetos;
private numElementos = 0;
Almacen (int maxElementos) {
listaObjetos = new Object[maxElementos];
}
public Object get(int i) {
return listaObject[i];
}
public void add(Object obj) {
listaObjetos[numElementos++] = obj;
}
public Iterador getIterador() {
new Iterador();
}
class Iterador {
int indice = 0;
Object siguiente() {
if (indice < numElementos) return listaObjetos[indice++];
else return null;
}
}
}

Y la forma de usarse, sera:


7

J2ME: Aplicaciones Java para Dispositivos Mviles


Almacen alm = new Almacen(10); // se crea un nuevo almacen
. . .
alm.add(...);
// se aaden objetos
. . .
// para recorrerlo
Almacen.Iterador i = alm.getIterador(); // obtengo un iterador para alm
Object o;
while ( (o = i.siguiente()) != null) {
. . .
}

3.1.3. Control de errores / excepciones

En la ejecucin de nuestros programas va a surgir una serie de errores que


debemos manejar de alguna manera. Para esto debemos determinar qu los provoca y,
una vez definido eso analizar que camino tomar, evitar el error, mostrar un mensaje
comprensible para el usuario, abortar la ejecucin del programa, etc.
Java define una excepcin como un objeto que es una instancia de la clase
throwable o alguna de sus subclases.
De la clase error se heredan las siguientes:
AWTError
LinkageError
ThreadDeath
VirtualMachineError
La excepciones, en cambio, se producen dentro de las condiciones normales, es
decir que no slo es posible capturarlas, sino que, incluso, el lenguaje nos obliga a
capturarlas y manejarlas. Hay algunas excepciones que son las ms conocidas, por
ejemplo, las que heredan de Exception son las siguientes: ClassNotFoundException,
InterruptedException, IOException, RuntimeException y SQLException.

J2ME: Aplicaciones Java para Dispositivos Mviles

Object

Throwable

Error

LinkageError

Exception

IOException

AWTError

Parte de la jerarqua de errores y excepciones de Java.


Uso de Try, Catch y Finally
Para capturar y manejar las excepciones, Java proporciona tres palabras
reservadas: try, catch y finally. Para simplificar, empezaremos primero con try y catch y
luego veremos para qu se utiliza finally.
Entre un try y un catch vamos a escribir el cdigo de programa que pueda provocar
una excepcin. La estructura general es:

En el ejemplo se observa que se pueden anidar sentencias catch, pero conviene


hacerlo indicando en ltimo lugar las excepciones ms generales (es decir, que se
encuentren ms arriba en el rbol de herencia de excepciones), porque el intrprete Java
ejecutar aquel bloque de cdigo catch cuyo parmetro sea del tipo de una excepcin
9

J2ME: Aplicaciones Java para Dispositivos Mviles

lanzada. Si por ejemplo se intentase capturar primero una excepcin Throwable, nunca
llegaramos a gestionar una excepcin Runtime, puesto que cualquier clase hija de
Runtime es tambin hija de Throwable, por herencia. Si no se ha lanzado ninguna
excepcin el cdigo contina sin ejecutar ninguna sentencia catch.Pero, y si quiero
realizar una accin comn a todas las opciones?.
Para insertar fragmentos de cdigo que se ejecuten tras la gestin de las
excepciones. Este cdigo se ejecutar tanto si se ha tratado una excepcin (catch) como
sino. Este tipo de cdigo se inserta en una sentencia finally, que ser ejecutada tras el
bloque try o catch:

Lanzamiento de excepciones: throw - throws


Muchas veces el programador dentro de un determinado mtodo deber
comprobar si alguna condicin de excepcin se cumple, y si es as lanzarla. Para ello se
utilizan las palabras reservadas throw y throws.
Por una parte la excepcin se lanza mediante la sentencia throw:
if ( condicion_de_excepcion == true )
throw new miExcepcion();

Se puede observar que hemos creado un objeto de la clase miExcepcion, puesto


que las excepciones son objetos y por tanto debern ser instanciadas antes de ser
lanzadas.
Aquellos mtodos que pueden lanzar excepciones, deben cules son esas
excepciones en su declaracin. Para ello se utiliza la sentencia throws:
tipo_devuelto miMetodoLanzador() throws miExcep1, miExcep2 {

10

J2ME: Aplicaciones Java para Dispositivos Mviles


// Codigo capaz de lanzar excepciones miExcep1 y miExcep2
}

Se puede observar que cuando se pueden lanzar en el mtodo ms de una


excepcin se deben indicar en su declaracin separada por comas.
Ejemplo de gestin de excepciones
Ahora que ya sabemos cmo funciona este sistema, conviene ver al menos un
pequeo ejemplo, que ilustre al lector en el uso de las excepciones:
// Creo una excepcin personalizada
class MiExcepcion extends Exception {
MiExcepcion(){
super(); // constructor por defecto de Exception
}
MiExcepcion( String cadena ){
super( cadena ); // constructor param. de Exception
}
}
// Esta clase lanzar la excepcin
class Lanzadora {
void lanzaSiNegativo( int param ) throws MiExcepcion {
if ( param < 0 )
throw new MiExcepcion( "Numero negativo" );
}
}
class Excepciones {
public static void main( String[] args ) {
// Para leer un fichero
Lanzadora lanza = new Lanzadora();
FileInputStream entrada = null;
int leo;

11

J2ME: Aplicaciones Java para Dispositivos Mviles


try {
entrada = new FileInputStream( "fich.txt" );
while ( ( leo = entrada.read() ) != -1 )
lanza.lanzaSiNegativo( leo );
entrada.close();
System.out.println( "Todo fue bien" );
} catch ( MiExcepcion e ){ // Personalizada
System.out.println( "Excepcion: " + e.getMessage() );
} catch ( IOException e ){ // Estndar
System.out.println( "Excepcion: " + e.getMessage() );
} finally {
if ( entrada != null )
try {
entrada.close(); // Siempre queda cerrado
} catch ( Exception e ) {
System.out.println( "Excepcion: " + e.getMessage() );
}
System.out.println( "Fichero cerrado." );
}
}
}
class Excepciones {
public static void main( String[] args ) {
// Para leer un fichero
FileInputStream entrada = null;
Lanzadora lanza = new Lanzadora();
int leo;
try {
entrada = new FileInputStream("fich.txt");

12

J2ME: Aplicaciones Java para Dispositivos Mviles


while ( ( leo = entrada.read() ) != -1 )
lanza.lanzaSiNegativo( leo );
System.out.println( "Todo fue bien" );
} catch ( MiExcepcion e ){ // Personalizada
System.out.println( "Excepcion: " + e.getMessage() );
} catch ( IOException e ){ // Estndar
System.out.println( "Excepcion: " + e.getMessage() );
} finally {
entrada.close(); // As el fichero siempre queda cerrado
System.out.println( "Fichero cerrado" );
}
}
}

Este programa lee un fichero (fichero.txt), y lee su contenido en forma de nmeros.


Si alguno de los nmeros ledos es negativo, lanza una excepcin MiExcepcion,
Adems gestiona la excepcin IOException, que es una excepcin de las que Java
incluye y que se lanza si hay algn problema en una operacin de entrada/salida.
Ambas excepciones son gestionadas, imprimiendo su contenido (cadena de error)
por pantalla.
La salida de este programa, suponiendo un nmero negativo sera:
Excepcion: Numero negativo
Fichero cerrado

En el caso de que no hubiera ningn nmero negativo sera:


Todo fue bien
Fichero cerrado

En el caso de que se produjese un error de E/S, al leer el primer nmero, sera:


Excepcion: java.io.IOException
Fichero cerrado

Conclusiones:

13

J2ME: Aplicaciones Java para Dispositivos Mviles

En cualquier caso se recomienda al programador no abusar de este sistema como


control de flujos simples, sino utilizarlo slo en aquellos estados del programa que
realmente creen un problema de ejecucin que pueda ser letal para el programa.
Cualquier mtodo que lance una excepcin tambin debe capturarla, o declararla
como parte del interfaz del mtodo. Cabe preguntarse entonces, el porqu de lanzar una
excepcin si hay que capturarla en el mismo mtodo. La respuesta es que las
excepciones no simplifican el trabajo del control de errores. Tienen la ventaja de que se
puede tener muy localizado el control de errores y no hay que controlar millones de
valores de retorno, pero no van ms all.

3.1.4. Entrada / Salida en Java


Creacin de Streams de Entrada
En la parte cliente de la aplicacin, se puede utilizar la clase DataInputStream para
crear un stream de entrada que est listo a recibir todas las respuestas que el servidor le
enve.
DataInputStream entrada;
try
{
entrada = new DataInputStream( miCliente.getInputStream() );
}
catch( IOException e )
{
System.out.println( e );
}

La clase DataInputStream permite la lectura de lneas de texto y tipos de datos


primitivos de Java de un modo altamente portable; dispone de mtodos para leer todos
esos tipos como: read(), readChar(), readInt(), readDouble() y readLine(). Deberemos
utilizar la funcin que creamos necesaria dependiendo del tipo de dato que esperemos
recibir del servidor.
En el lado del servidor, tambin usaremos DataInputStream, pero en este caso
para recibir las entradas que se produzcan de los clientes que se hayan conectado:
DataInputStream entrada;
try
{
entrada = new DataInputStream( socketServicio.getInputStream() );
}
catch( IOException e )
{
System.out.println( e );
}

14

J2ME: Aplicaciones Java para Dispositivos Mviles

Creacin de Streams de Salida


En el lado del cliente, podemos crear un stream de salida para enviar informacin
al socket del servidor utilizando las clases PrintStream o DataOutputStream:
PrintStream salida;
try
{
salida = new PrintStream( miCliente.getOutputStream() );
}
catch( IOException e )
{
System.out.println( e );
}

La clase PrintStream tiene mtodos para la representacin textual de todos los


datos primitivos de Java. Sus mtodos write y println() tienen una especial importancia en
este aspecto. No obstante, para el envo de informacin al servidor tambin podemos
utilizar DataOutputStream:
DataOutputStream salida;
try
{
salida = new DataOutputStream( miCliente.getOutputStream() );
}
catch( IOException e )
{
System.out.println( e );
}

La clase DataOutputStream permite escribir cualquiera de los tipos primitivos de


Java, muchos de sus mtodos escriben un tipo de dato primitivo en el stream de salida.
De todos esos mtodos, el ms til quizs sea writeBytes().
En el lado del servidor, podemos utilizar la clase PrintStream para enviar
informacin al cliente:
PrintStream salida;
try
{
salida = new PrintStream( socketServicio.getOutputStream() );
}
catch( IOException e )
{
System.out.println( e );
}

Pero tambin podemos utilizar la clase DataOutputStream como en el caso de


envo de informacin desde el cliente
3.1.5. Clases Fundamentales
15

J2ME: Aplicaciones Java para Dispositivos Mviles

Math
La clase Math representa la librera matemtica de Java. Las funciones que
contiene son las de todos los lenguajes, parece que se han metido en una clase
solamente a propsito de agrupacin, por eso se encapsulan en Math, y lo mismo sucede
con las dems clases que corresponden a objetos que tienen un tipo equivalente
(Character, Float, etc.). El constructor de la clase es privado, por los que no se pueden
crear instancias de la clase. Sin embargo, Math es public para que se pueda llamar desde
cualquier sitio y static para que no haya que inicializarla.
El ejemplo javam1.java, muestra la utilizacin de algunas de las funciones de la
clase Math:
class javam1 {
public static void main( String args[] ) {
int x;
double rand,y,z;
float max;
rand = Math.random();
x = Math.abs( -123 );
y = Math.round( 123.567 );
z = Math.pow( 2,4 );
max = Math.max( (float)1e10,(float)3e9 );
System.out.println(
System.out.println(
System.out.println(
System.out.println(
System.out.println(

rand );
x );
y );
z );
max );

Integer
Cada tipo numrico tiene su propia clase de objetos. As el tipo int tiene el objeto
Integer. De la misma forma que con la clase Character, se han codificado muchas
funciones tiles dentro de los mtodos de la clase Integer.
Declaraciones
La primera sentencia crear una variable int y la segunda un objeto Integer:
int i;
Integer I;

Valores de Integer
Integer.MIN_VALUE;
Integer.MAX_VALUE;

16

J2ME: Aplicaciones Java para Dispositivos Mviles

Mtodos de Integer
String Integer.toString( int i,int base );
String Integer.toString( int i );
int I.parseInt( String s,int base );
int I.parseInt( String s );
Integer Integer.valueOf( String s,int base );
Integer Integer.valueOf( String s );
int I.intValue();
long I.longValue();
float I.floatValue();
double I.doubleValue();
String I.toString();
int I.hashCode();
boolean I.equals( Object obj );

En los mtodos toString(), parseInt() y valueOf() que no se especifica la base sobre


la que se trabaja, se asume que es base 10
Random
La clase Random es un generador de nmero pseudo-aleatorios. El algoritmo que
se utiliza para la obtencin de estos nmeros, es el que Donald Knuth presenta en su libro
The Art of Computer Programming. Son nmeros no realmente aleatorios porque son
secuencias distribuidas uniformemente, obtenidas a partir de una semilla inicial.
Cuando se inicializa un objeto Random con una semilla, se puede obtener a
continuacin lo que parece una secuencia aleatoria, pero si se vuelve a inicializar el objeto
con la misma semilla se vuelve a obtener la misma secuencia. Normalmente se utiliza la
hora actual del sistema como semilla para inicializar estos objetos, lo que disminuye la
posibilidad de obtener secuencias de nmeros repetidas.
De un objeto Random se pueden extraer varios tipos de nmeros aleatorios a
travs de sus mtodos.
3.1.6. Interfaces
AWT
AWT es el acrnimo del X Window Toolkit para Java, donde X puede ser cualquier
cosa: Abstract, Alternative, Awkward, Another o Asqueroso; aunque parece que Sun se
decanta por Abstracto, seriedad por encima de todo. Se trata de una biblioteca de clases
Java para el desarrollo de Interfaces de Usuario Grficas. La versin del AWT que Sun
proporciona con el JDK se desarroll en slo dos meses y es la parte ms dbil de todo lo
que representa Java como lenguaje. El entorno que ofrece es demasiado simple, no se
han tenido en cuenta las ideas de entornos grficos novedosos. Quiz la presin de tener
que lanzar algo al mercado haya tenido mucho que ver en la pobreza de AWT.
Javasoft, en vista de la precariedad de que hace gala el AWT, y para asegurarse
que los elementos que desarrolla para generar interfaces grficas sean fcilmente
transportables entre plataformas, se ha unido con Netscape, IBM y Lighthouse Design
17

J2ME: Aplicaciones Java para Dispositivos Mviles

para crear un conjunto de clases que proporcionen una sensacin visual agradable y sean
ms fciles de utilizar por el programador. Esta coleccin de clases son las Java
Foundation Classes (JFC), que estn constituidas por cinco grupos de clases, al menos
en este momento: AWT, Java 2D, Accesibilidad, Arrastrar y Soltar y Swing.
AWT, engloba a todos los componentes del AWT que existan en la versin 1.1.2
del JDK y en los que se han incorporado en versiones posteriores:
Java 2D es un conjunto de clases grficas bajo licencia de IBM/Taligent, que
todava est en construccin
Accesibilidad, proporciona clases para facilitar el uso de ordenadores y tecnologa
informtica a disminuidos, como lupas de pantalla, y cosas as
Arrastrar y Soltar (Drag and Drop), son clases en las que se soporta Glasgow,
que es la nueva generacin de los JavaBeans
Swing, es la parte ms importante y la que ms desarrollada se encuentra. Ha sido
creada en conjuncin con Netscape y proporciona una serie de componentes muy
bien descritos y especificados de forma que su presentacin visual es
independiente de la plataforma en que se ejecute el applet o la aplicacin que
utilice estas clases. Swing simplemente extiende el AWT aadiendo un conjunto
de componentes, JComponents, y sus clases de soporte. Hay un conjunto de
componentes de Swing que son anlogos a los de AWT, y algunos de ellos
participan de la arquitectura MVC (Modelo-Vista-Controlador), aunque Swing
tambin proporciona otros widgets nuevos como rboles, pestaas, etc.
La estructura bsica del AWT se basa en Componentes y Contenedores. Estos
ltimos contienen Componentes posicionados a su respecto y son Componentes a su vez,
de forma que los eventos pueden tratarse tanto en Contenedores como en Componentes,
corriendo por cuenta del programador (todava no hay herramientas de composicin
visual) el encaje de todas las piezas, as como la seguridad de tratamiento de los eventos
adecuados. Con Swing se va un paso ms all, ya que todos los JComponentes son
subclases de Container, lo que hace posible que widgets Swing puedan contener otros
componentes, tanto de AWT como de Swing, lo que hace prever interesantes
posibilidades.
A continuacin se aborda la programacin con el AWT fundamentalmente para
tener la base suficiente y poder seguir profundizando en las dems caractersticas del
lenguaje Java, aunque tambin se presentarn ejemplos de utilizacin de JComponentes
cuando Swing tenga implementado alguno que corresponda el del AWT o derivado de l.
Interfaz de Usuario
El interfaz de usuario es la parte del programa que permite a ste interactuar con el
usuario. Las interfaces de usuario pueden adoptar muchas formas, que van desde la
simple lnea de comandos hasta las interfaces grficas que proporcionan las aplicaciones
ms modernas.
18

J2ME: Aplicaciones Java para Dispositivos Mviles

El interfaz de usuario es el aspecto ms importante de cualquier aplicacin. Una


aplicacin sin un interfaz fcil, impide que los usuarios saquen el mximo rendimiento del
programa. Java proporciona los elementos bsicos para construir decentes interfaces de
usuario a travs del AWT, y opciones para mejorarlas mediante Swing, que s permite la
creacin de interfaces de usuario de gran impacto y sin demasiados quebraderos de
cabeza por parte del programador.
Al nivel ms bajo, el sistema operativo transmite informacin desde el ratn y el
teclado como dispositivos de entrada al programa. El AWT fue diseado pensando en que
el programador no tuviese que preocuparse de detalles como controlar el movimiento del
ratn o leer el teclado, ni tampoco atender a detalles como la escritura en pantalla. El
AWT constituye una librera de clases orientada a objeto para cubrir estos recursos y
servicios de bajo nivel.
Debido a que el lenguaje de programacin Java es independiente de la plataforma
en que se ejecuten sus aplicaciones, el AWT tambin es independiente de la plataforma
en que se ejecute. El AWT proporciona un conjunto de herramientas para la construccin
de interfaces grficas que tienen una apariencia y se comportan de forma semejante en
todas las plataformas en que se ejecute. Los elementos de interfaz proporcionados por el
AWT estn implementados utilizando toolkits nativos de las plataformas, preservando una
apariencia semejante a todas las aplicaciones que se creen para esa plataforma. Este es
un punto fuerte del AWT, pero tambin tiene la desventaja de que un interfaz grfico
diseado para una plataforma, puede no visualizarse correctamente en otra diferente.
Estas carencias del AWT son subsanadas en parte por Swing, y en general por las JFC.
Swing
Cuando se empieza a utilizar Swing, se observa que JavaSoft ha dado un gran
paso adelante respecto al AWT. Ahora los Componentes del interfaz grfico son Beans y
utilizan el nuevo modelo de Delegacin de Eventos de Java. Swing proporciona un
conjunto completo de Componentes, todos ellos lightweight, es decir, ya no se usan
componentes "peer" dependientes del sistema operativo, y adems, Swing est
totalmente escrito en Java. Todo ello redunda en una mayor funcionalidad en manos del
programador, y en la posibilidad de mejorar en gran medida la cosmtica de los interfaces
grficos de usuario.
Son muchas las ventajas que ofrece el uso de Swing. Por ejemplo, la navegacin
con el teclado es automtica, cualquier aplicacin Swing se puede utilizar sin ratn, sin
tener que escribir ni una lnea de cdigo adicional. Las etiquetas de informacin, o "tool
tips", se pueden crear con una sola lnea de cdigo. Adems, Swing aprovecha la
circunstancia de que sus Componentes no estn renderizados sobre la pantalla por el
sistema operativo para soportar lo que llaman "pluggable look and feel", es decir, que la
apariencia de la aplicacin se adapta dinmicamente al sistema operativo y plataforma en
que est corriendo.
Los Componentes Swing no soportan el modelo de Eventos de Propagacin, sino
solamente el modelo de Delegacin incluido desde el JDK 1.1; por lo tanto, si se van a
utilizar componentes Swing, se debe programar exclusivamente en el nuevo modelo.
19

J2ME: Aplicaciones Java para Dispositivos Mviles

El paso de AWT a Swing es muy sencillo y no hay que descartar nada de lo que se
haya hecho con el AWT. Afortunadamente, los programadores de Swing han tenido
compasin y, en la mayora de los casos es suficiente con aadir una "J" al componente
AWT para que se convierta en un componente Swing.
Es muy importante entender y asimilar el hecho de que Swing es una extensin del
AWT, y no un sustituto encaminado a reemplazarlo. Aunque esto sea verdad en algunos
casos en que los componentes de Swing se corresponden a componentes del AWT; por
ejemplo, el JButton de Swing puede considerarse como un sustituto del Button del AWT,
y una vez que se usen los botones de Swing se puede tomar la decisin de no volver a
utilizar jams un botn de AWT, pero, la funcionalidad bsica de Swing descansa sobre el
AWT. Todo esto es para evitar que el lector salte directamente a Swing, ya que sera
conveniente que primero entendiese el AWT y cmo Swing mejora al AWT.
Para iniciar la entrada en Swing, qu mejor que implementar de nuevo otra versin
del saludo inicial, pero con los componentes Swing, as que la versin del "Hola Mundo!",
se convierte ahora en JHolaMundo.java, cuyo cdigo es el que sigue.
import com.sun.java.swing.*;
public class JHolaMundo extends JFrame {
public static void main( String argv[] ) {
new JHolaMundo();
}
JHolaMundo() {
JLabel hola = new JLabel( "Hola Mundo!" );
getContentPane().add( hola,"Center" );
setSize( 200,100);
setVisible( true );
}
}

3.2.

J2ME. Arquitectura general

3.2.1. Origen
En 1999 fue presentada la edicin Java 2 Micro Edition por Sun Microsystems con
el propsito de habilitar aplicaciones Java para pequeos dispositivos. Se present una
primera versin que poda ejecutarse en dispositivos Palm.
Para empezar podemos decir que Java Micro Edition es la versin del lenguaje
Java que est orientada al desarrollo de aplicaciones para dispositivos pequeos con
capacidades restringidas tanto en pantalla grfica, como de procesamiento y memoria
(telfonos mviles, PDA`s, Handhelds, Pagers, etc). La tarda aparicin de esta
tecnologa, (hemos visto que la tecnologa Java naci a mediados de los 90 y Java Micro
Edition apareci a finales), puede ser debido a que las necesidades de los usuarios de
telefona mvil ha cambiado mucho en estos ltimos aos y cada vez demandan ms
20

J2ME: Aplicaciones Java para Dispositivos Mviles

servicios y prestaciones por parte tanto de los terminales como de las compaas.
Adems el uso de esta tecnologa depende del asentamiento en el mercado de otras,
como GPRS, ntimamente asociada a J2ME y que no ha estado a nuestro alcance hasta
hace poco.
J2ME es la tecnologa del futuro para la industria de los dispositivos mviles.
Actualmente las compaas telefnicas y los fabricantes de mviles estn implantando los
protocolos y dispositivos necesarios para soportarla.
Usaremos emuladores dnde podremos ejecutar y depurar nuestros programas,
evitando as la descarga insatisfactoria de nuestra aplicacin en un verdadero terminal.
Antes de comenzar con los conceptos necesarios de Java Micro Edition vamos a realizar
un estudio de las distintas versiones de Java.

3.2.2. Principales caractersticas


El paquete Java 2 lo podemos dividir en 3 ediciones distintas. J2SE (Java Standard
Edition) orientada al desarrollo de aplicaciones independientes de la plataforma, J2EE
(Java Enterprise Edition) orientada al entorno empresarial y J2ME (Java Micro Edition)
orientada a dispositivos con capacidades restringidas. Veamos cules son las
caractersticas de cada una de las versiones:

Java 2 Platform, Standard Edition (J2SE)


Esta edicin de Java es la que en cierta forma recoge la iniciativa original del
lenguaje Java. Esta versin es la que se utiliza en el mdulo 1 del Master en Java. Tiene
las siguientes caractersticas:
Inspirado inicialmente en C++, pero con componentes de alto nivel, como soporte
nativo de strings y recolector de basura.
Cdigo independiente de la plataforma, precompilado a bytecodes intermedio y
ejecutado en el cliente por una JVM (Java Virtual Machine).
Modelo de seguridad tipo sandbox proporcionado por la JVM.
Abstraccin del sistema operativo subyacente mediante un juego completo de APIs
de programacin.
Esta versin de Java contiene el conjunto bsico de herramientas usadas para
desarrollar Java Applets, as cmo las APIs orientadas a la programacin de aplicaciones
de usuario final: Interfaz grfica de usuario, multimedia, redes de comunicacin, etc.
Java 2 Platform, Enterprise Edition (J2EE)

21

J2ME: Aplicaciones Java para Dispositivos Mviles

Esta versin est orientada al entorno empresarial. El software empresarial tiene


unas caractersticas propias marcadas: est pensado no para ser ejecutado en un equipo,
sino para ejecutarse sobre una red de ordenadores de manera distribuida y remota
mediante EJBs (Enterprise Java Beans). De hecho, el sistema se monta sobre varias
unidades o aplicaciones.
En muchos casos, adems, el software empresarial requiere que se sea capaz de
integrar datos provenientes de entornos heterogneos. Esta edicin est orientada
especialmente al desarrollo de servicios web, servicios de nombres, persistencia de
objetos, XML, autenticacin, APIs para la gestin de transacciones, etc. El cometido de
esta especificacin es ampliar la J2SE para dar soporte a los requisitos de las
aplicaciones de empresa.
Esta versin de Java 2 es la que se estudia en el mdulo 3 del Master en Java.
Java 2 Platform, Micro Edition (J2ME)
Esta versin de Java est enfocada a la aplicacin de la tecnologa Java en
dispositivos electrnicos con capacidades computacionales y grficas muy reducidas,
tales como telfonos mviles, PDAs o electrodomsticos inteligentes. Esta edicin tiene
unos componentes bsicos que la diferencian de las otras versiones, como el uso de una
mquina virtual denominada KVM (Kilo Virtual Machine, debido a que requiere slo unos
pocos Kilobytes de memoria para funcionar) en vez del uso de la JVM clsica, inclusin
de un pequeo y rpido recolector de basura y otras diferencias que ya iremos viendo
ms adelante.
J2EE

J2SE

J2ME

Relacin entre las APIs de la plataforma Java.

Los componentes que forman parte de J2ME son:


Por un lado tenemos una serie de mquinas virtuales Java con diferentes
requisitos, cada una para diferentes tipos de pequeos dispositivos.
Configuraciones, que son un conjunto de clases bsicas orientadas a conformar el
corazn de las implementaciones para dispositivos de caractersticas especficas.
Existen 2 configuraciones definidas en J2ME: Connected Limited Device
22

J2ME: Aplicaciones Java para Dispositivos Mviles

Configuration (CLDC) enfocada a dispositivos con restricciones de procesamiento y


memoria, y Connected Device Configuration (CDC) enfocada a dispositivos con
ms recursos.
Perfiles, que son unas bibliotecas Java de clases especficas orientadas a
implementar funcionalidades de ms alto nivel para familias especficas de
dispositivos.
Un entorno de ejecucin determinado de J2ME se compone entonces de una
seleccin de:
a) Mquina virtual.
b) Configuracin.
c) Perfil.
d) Paquetes Opcionales.
A continuacin estudiaremos en profundidad cada uno de los primeros tres componentes.

Mquinas Virtuales J2ME


Una mquina virtual de Java (JVM) es un programa encargado de interpretar
cdigo intermedio (bytecode) de los programas Java precompilados a cdigo mquina
ejecutable por la plataforma, efectuar las llamadas pertinentes al sistema operativo
subyacente y observar las reglas de seguridad y correccin de cdigo definidas para el
lenguaje Java.
Las implementaciones tradicionales de JVM son, en general, muy pesadas en
cuanto a memoria ocupada y requerimientos computacionales. J2ME define varias JVMs
de referencia adecuadas al mbito de los dispositivos electrnicos que, en algunos casos,
suprimen algunas caractersticas con el fin de obtener una implementacin menos
exigente.
Ya hemos visto que existen 2 configuraciones CLDC y CDC, cada una con unas
caractersticas propias que veremos en profundidad ms adelante. Como consecuencia,
cada una requiere su propia mquina virtual. La VM (Virtual Machine) de la configuracin
CLDC se denomina KVM y la de la configuracin CDC se denomina CVM.
KVM
Se corresponde con la Mquina Virtual ms pequea desarrollada por Sun. Su
nombre KVM proviene de Kilobyte (haciendo referencia a la baja ocupacin de memoria,
entre 40Kb y 80Kb). Se trata de una implementacin de Mquina Virtual reducida y
especialmente orientada a dispositivos con bajas capacidades computacionales y de
memoria.
La KVM fue diseada para ser:

23

J2ME: Aplicaciones Java para Dispositivos Mviles

Pequea, con una carga de memoria entre los 40Kb y los 80 Kb, dependiendo de
la plataforma y las opciones de compilacin.
Alta portabilidad.
Modulable.
Lo ms completa y rpida posible y sin sacrificar caractersticas para las que fue
diseada.
Sin embargo, esta baja ocupacin de memoria hace que posea algunas limitaciones
con respecto a la clsica Java Virtual Machine (JVM):
No hay soporte para tipos en coma flotante. No existen por tanto los tipos double ni
float. Esta limitacin est presente porque los dispositivos carecen del hardware
necesario para estas operaciones.
No existe soporte para JNI (Java Native Interface) debido a los recursos limitados
de memoria.
No existen cargadores de clases (class loaders) definidos por el usuario. Slo
existen los predefinidos.
No se permiten los grupos de hilos o hilos daemon. Cundo queramos utilizar
grupos de hilos utilizaremos los objetos Coleccin para almacenar cada hilo en el
mbito de la aplicacin.
No existe la finalizacin de instancias de clases. No existe el mtodo
Object.finalize().
No hay referencias dbiles.1
Limitada capacidad para el manejo de excepciones debido a que el manejo de
stas depende en gran parte de las APIs de cada dispositivo por lo que son stos
los que controlan la mayora de las excepciones.
Aparte de la no inclusin de estas caractersticas, la verificacin de clases merece un
comentario aparte. El verificador de clases estndar de Java es demasiado grande para la
KVM. De hecho es ms grande que la propia KVM y el consumo de memoria es excesivo,
ms de 100Kb para las aplicaciones tpicas. Este verificador de clases es el encargado de
rechazar las clases no vlidas en tiempo de ejecucin. Este mecanismo verifica los
bytecodes de las clases Java realizando las siguientes comprobaciones:
Ver que el cdigo no sobrepase los lmites de la pila de la VM.
Comprobar que no se utilizan las variables locales antes de ser inicializadas.
Comprobar que se respetan los campos, mtodos y los modificadores de control de
acceso a clases.

24

J2ME: Aplicaciones Java para Dispositivos Mviles

Por esta razn los dispositivos que usen la configuracin CLDC y KVM introducen
un algoritmo de verificacin de clases en dos pasos. Este proceso puede apreciarse
grficamente en la Figura 1.4.
La KVM puede ser compilada y probada en 3 plataformas distintas:
1. Solaris Operating Environment.
2. Windows
3. PalmOs
CVM
La CVM (Compact Virtual Machine) ha sido tomada como Mquina Virtual Java de
referencia para la configuracin CDC y soporta las mismas caractersticas que la Mquina
Virtual de J2SE. Est orientada a dispositivos electrnicos con procesadores de 32 bits de
gama alta y 2Mb o ms de memoria RAM. Las caractersticas que presenta esta Mquina
Virtual son:
Sistema de memoria avanzado.
Tiempo de espera bajo para el recolector de basura.
Separacin completa de la VM del sistema de memoria.
Recolector de basura modularizado.
Portabilidad.
Rpida sincronizacin.
Ejecucin de las clases Java fuera de la memoria de slo lectura (ROM).
Soporte nativo de hilos.
Baja ocupacin en memoria de las clases.
Proporciona soporte e interfaces para servicios en Sistemas Operativos de
Tiempo Real.
Conversin de hilos Java a hilos nativos.
25

J2ME: Aplicaciones Java para Dispositivos Mviles

Soporte para todas las caractersticas de Java2 v1.3 y libreras de seguridad,


referencias dbiles, Interfaz Nativa de Java (JNI), invocacin remota de mtodos
(RMI), Interfaz de depuracin de la Mquina Virtual (JVMDI).

3.3 . Dispositivos mviles


Existe una amplia gama de trminos para referirse a este tipo de aparatos:
"information device", "information appliance", "consumer electronic", "embedded device" o
"small device", por ejemplo. En conclusin, las caractersticas son:

Son aparatos pequeos


Algunas capacidades de procesamiento
Conexin permanente o intermitente a una red,
Memoria limitada,
Diseados especficamente para una funcin, pero que pueden llevar a cabo otras
ms generales.
Normalmente se asocian al uso individual de una persona, tanto en posesin como
en operacin, el cual puede adaptarlos a su gusto.
La mayora de estos aparatos pueden ser transportados en el bolsillo del propietario
y otros estn integrados dentro de otros mayores, controlando su funcionalidad
(como puede ser el ordenador integrado en una lavadora).
Sigamos con la descripcin genrica de los mismos. Una caracterstica importante
es el concepto de movilidad: los dispositivos mviles son aquellos suficientemente
pequeos para ser transportados y empleados durante su transporte. Normalmente se
sincronizan con un sistema de sobremesa para actualizar aplicaciones y datos.
Una aplicacin de estos dispositivos es un vendedor que carga en su PDA, en su
despacho, antes de salir de la oficina, los datos de los clientes que tiene que visitar.
Durante su visita actualiza o modifica la informacin y, una vez termina su ruta, ya en la
oficina, actualiza los datos en la aplicacin corporativa.
Otro concepto importante es el trmino ingls "wireless" (inalmbrico). Un
dispositivo inalmbrico es aquel que es capaz de comunicarse o acceder a una red sin
cables. Por ejemplo, un telfono mvil, comunicadores de bolsillos o PDAs. Este tipo de
dispositivos se comportan como si estuvieran directamente conectados a una red
mediante un cable, dando la impresin al usuario que los datos estn almacenados en el
propio dispositivo.
Los conceptos de mvil y sin cables muchas veces se confunden. Por ejemplo:
Un telfono mvil equipado con un pequeo navegador puede navegar por Internet.
En este caso, se considera wireless, pero no se considerar mvil si no dispone de un
valor aadido en forma de aplicaciones que aporte alguna funcin cuando no est
26

J2ME: Aplicaciones Java para Dispositivos Mviles

conectado a otros sistemas. Si el PDA es capaz de conectarse a una red para obtener
datos "en medio de la calle", entonces tambin ser wireless.
Algunas de las caractersticas que hacen que estos dispositivos sean diferentes de
los ordenadores de sobremesa son los siguientes:
Funcionalidad limitada.
No necesariamente extensible y actualizable.
En pocos aos el usuario deber cambiarlo.
Ms barato.
Menos complicado en su manejo.
Fcil de aprender su operacin.
No se requieren usuarios expertos.
Algunos de estos dispositivos son los siguientes:
Paginadores.
Comunicadores de bolsillo.
Telfonos con pantalla para Internet (Internet Screen Phones).
Sistemas de navegacin de automviles.
Sistemas de entretenimiento.
Sistemas de televisin e Internet (WebTV).
Telfonos mviles.
Organizadores y asistentes personales digitales (Personal Digital Assistant ).
Veamos a continuacin de una forma ms detallada los dispositivos que
mayormente trataremos en este curso: el telfono mvil y el PDA.
Los telfonos mviles son de los aparatos sofisticados que encontramos en nuestro
cotidiano quehacer. Para comprimir y descomprimir seales digitales codificadas, tienen
que procesar millones de clculos por segundo. No obstante, se componen de apenas
algunos componentes. Son estos:
Un micrfono microscpico.
Un altavoz.
Una pantalla de cristale lquido o plasma.
Un teclado.
Una antena.
Una batera.
Una placa de circuitos.
27

J2ME: Aplicaciones Java para Dispositivos Mviles

El mvil posee un microprocesador que realiza clculos a gran velocidad, llamado


DSP, o Digital Signal Processor (Procesador Digital de Seales). Este procesador har
toda la compresin y descompresin de los datos a la velocidad de 40 MIPS (Millones de
Instrucciones Por Segundo). El microprocesador trata todas las tareas del teclado y de la
pantalla, gestiona los comandos y controla las seales de la estacin de base, adems de
coordinar las dems funciones.
Las ventajas que presenta un telfono mvil como tipo de dispositivo mvil son varias:
Muy extendido.
Ligeros y transportable.
Econmico.
Poseen prestaciones de comunicacin innatas.
Por el contrario, tambin muestran algunos inconvenientes:
Poca potencia de proceso.
Poca memoria.
Capacidades de visualizacin limitada.
Interaccin avanzada difcil.

Cmo se produce la comunicacin?


La operadora de telefona mvil correspondiente reparte el rea en varios espacios,
en varias clulas, normalmente hexagonales (forma geomtrica que permite ocupar todo
el espacio y se aproxima mucho a la circunferencia), compuesto de una inmensa red de
hexgonos. En cada clula existe una estacin base transmisora, tpicamente, una simple
antena. Cada clula consigue utilizar varias decenas de canales, lo que da la posibilidad
que varias decenas de personas se comuniquen simultneamente por ella. Cuando una
persona se mueve de una clula para otra, pasa a utilizar la frecuencia de la nueva clula,
dejando libre la clula anterior para ser usada por otra persona. Como las distancias de
transmisin no son muy grandes, los telfonos mviles pueden transmitir con poca
energa, luego, con pequeas bateras que permiten un tamao y un peso reducido. Son,
por tanto, las clulas, que tornan posibles los telfonos mviles como los conocemos hoy.
Por ello la expresin de telfonos celulares.
Sistemas de telefona mvil
En cuanto a los sistemas de telefona, el primero de ellos es GSM, que fue
diseado originalmente para transmitir voz, pero con el tiempo la tecnologa les posibilit
tambin operar en modo de transferencia de datos. Los terminales operan por
conmutacin de circuitos, pudiendo sta ser visualizada como dos interruptores que
necesitan estar encendidos para que exista transmisin de informacin. Esto lleva a que
el establecimiento de conexin conlleva tiempos de espera, debido a la necesidad de los
dos mdems estar conectados uno con el otro simultneamente y que la llamada est
siempre abierta, an cuando no existe transferencia de datos.
28

J2ME: Aplicaciones Java para Dispositivos Mviles

Esta forma de transmisin es extremamente limitada en trminos de capacidad, a


pesar de estar a ser desarrollada tecnologa como el HSCSD (High Speed Circuit
Switched Data) que permite una velocidad mxima de 56 Kbps. Otro problema es el
hecho de no ser posible a esta tecnologa soportar el IP (Internet Protocol), lo que impide
el acceso directo a Internet.
El estudio de las limitaciones de GMS origina la necesidad de un sistema basado
en la transmisin de datos por paquetes (IP). En 1998 el ETSI (European
Telecommunications Standards Institute), la entidad reguladora de las telecomunicaciones
europeas, concluy sus estudios sobre la definicin de las normas de un nuevo sistema,
el GPRS, que permite una mayor capacidad de transmisin de datos. GPRS permite una
velocidad mxima terica de 177.2 Kbps, en caso de que utilice todos los recursos del
sistema. Finalmente, el GPRS permite toda una nueva serie de aplicaciones dentro de los
mviles, apenas accesibles hasta ahora a quien posea un ordenador personal, tales como
la visualizacin de pginas de la Web, FTP, IRC, animacin, etc. En resumen, el GPRS
trae consigo los siguientes beneficios:
Conexin a Internet permanente (siempre "on-line").
Establecimiento instantneo de la conexin.
Posibilidad de que la facturacin del servicio sea realizada segn la
cantidad de informacin transmitida / recibida, al envs de ser
contabilizado el tiempo que se est conectado.
Una mayor velocidad de transmisin de datos.
El UMTS (Universal Mobile Telecommunication System) es el nuevo protocolo por
la 3 generacin de telfonos mviles. Integrado en el proyecto de crear un estndar que
pueda ser utilizado mundialmente (al revs de la 2 generacin, cuyos sistemas
americano y europeo son incompatibles), el UMTS debe alterar la forma de como los
mviles son utilizados actualmente, al permitir capacidades multimedia y un acceso sin
lmites a Internet.
Con los adelantos tecnolgicos de los ltimos aos dentro de Internet y de la
telefona mvil, se asiste ahora a una convergencia cada vez mayor entre estos dos
medios de comunicacin. El UMTS representa la unin de ambos en una nica
plataforma. Tambin designado de 3G, o tercera generacin de telfonos mviles, este
sistema permite que el usuario pueda acceder a imgenes y vdeos, as como a Internet
de manera veloz, calidad de voz casi igual a la de las redes fijas, y una larga lista de otras
funciones diversas.
El UMTS resulta de la necesidad de implantar una nueva generacin de telfonos
mviles debido al aumento del nmero de usuarios de este medio de comunicacin. El
xito del sistema GSM, dentro de Europa, conllev la saturacin de las frecuencias de
radio que le fueron originalmente atribuidas. Tal problema cre la necesidad de lanzar una
nueva generacin y, a travs de sta, ampliar el espectro electromagntico disponible as
como permitir el acceso a nuevos servicios.
29

J2ME: Aplicaciones Java para Dispositivos Mviles

La tecnologa UMTS no est limitada a las redes mviles, estando prevista su


utilizacin por otras redes. La tecnologa digital utilizada por el UMTS se denomina de
WCMDA (Wide Code Multiple Division Access).
Los datos son transmitidos en banda ancha, siendo divididos en paquetes antes de
la transmisin, los cuales son despus reunidos por el terminal antes de presentar la
informacin en la pantalla. Este sistema est basado en el protocolo americano de los
telfonos mviles de segunda generacin (el CMDA), no siendo compatible con el GSM.
Adems de las funciones bsicas a que estamos habituados en nuestro mvil,
como simplemente telefonear a alguien o enviar / recibir mensajes, el UMTS permite
acrecentar una nueva serie de caractersticas hasta ahora casi inaccesibles o apenas
presentes en las pelculas de ciencia-ficcin. El sistema permitie el acceso a Internet a
una velocidad ms rpida que los mdems normales, as como la transmisin de faxes,
imgenes, vdeos y datos. Al mismo tiempo que estaremos telefoneando es posible
visualizar en la pantalla, en tiempo real, la persona con quien comunicamos, en caso de
que sta tambin posea un mvil UMTS.
El acceso a Internet es bastante ms rpido y sin limites, pudindose acceder a
cualquier tipo de informacin, en cualquier lugar en que estemos. Informacin, comercio y
entretenimiento multimedia estn disponibles en pantalla, en un sistema que integra las
redes de telecomunicaciones mviles, fijas y por satlite. Adems del "roaming" a escala
mundial, el UMTS permite la convergencia de los varios tipos de redes existentes.
Segn la Comisin Europea, los servicios UMTS deben poseer las siguientes
caractersticas:
Capacidad multimedia y una gran movilidad.
Acceso eficiente a Internet.
Alta velocidad.
Portabilidad entre los varios ambientes UMTS (permitiendo el acceso a las
redes UMTS terrestres y de satlite).
Compatibilidad entre el sistema GSM y el UMTS, debiendo los terminales
poseer "dual band" o funcionar en ambos los sistemas.
Esta nueva tecnologa debe alterar radicalmente la manera como utilizamos los
telfonos mviles. Las personas tienen el mvil ms tiempo delante de los ojos que
pegado a la oreja, debido a que este pasa a ser un dispositivo multimedia, como la
televisin o la computadora. Al mismo tiempo, la transmisin de datos ocupa una parte
mayor del tiempo de utilizacin del telfono mvil, debido a todas las posibilidades
existentes (enviar faxes, e-mails,...).
La calidad de voz es semejante a la de los telfonos fijos y la velocidad de transmisin
de datos superior a la de un mdem normal, lo que puede significar que las personas
usen apenas el mvil, en sustitucin del telfono fijo y del acceso a Internet a travs del
ordenador. Adems, se tiene la posibilidad de tener Internet en la palma de la mano.
3.4 . El entorno J2ME
30

J2ME: Aplicaciones Java para Dispositivos Mviles

3.4.1 . JDK
Vamos a ver las herramientas que se necesitan para construir nuestros MIDlets. El
proceso de creacin de stos se puede realizar bsicamente de dos formas:
A travs de la lnea de comandos: en este caso no haremos uso de ninguna
herramienta especial para el desarrollo de nuestra aplicacin.
A travs de un entorno visual: el uso de este tipo de herramientas nos facilitar
mucho, como veremos, el proceso de desarrollo de los MIDlets.
Los MIDlets que vamos a crear sern ejecutados en dispositivos MID (Mobile
Information Device) y no en la mquina donde los desarrollamos. Por esta razn, sea cual
sea el mtodo de creacin que usemos, tendremos que hacer uso de algn emulador
para realizar las pruebas de nuestra aplicacin.
Este emulador puede representar a un dispositivo genrico o puede ser de algn modelo
de MID especfico. El uso de estos emuladores ya lo veremos ms adelante.
Antes de empezar a explicar los pasos a seguir para instalar las herramientas
necesarias que usaremos para la construccin de los MIDlets, vamos a ver las etapas
bsicas que han de realizarse con este objetivo:
1. Desarrollo: En esta fase vamos a escribir el cdigo que conforma nuestro MIDlet.
2. Compilacin: Se compilar nuestra aplicacin haciendo uso de un compilador
J2SE.
3. Preverificacin: Antes de empaquetar nuestro MIDlet es necesario realizar un
proceso de preverificacin de las clases Java. En esta fase se realiza un examen
del cdigo del MIDlet para ver que no viola ninguna restriccin de seguridad de la
plataforma J2ME.
4. Empaquetamiento: En esta fase crearemos un archivo JAR que contiene los
recursos que usa nuestra aplicacin, y crearemos tambin un archivo descriptor
JAD.
5. Ejecucin: Para esta fase haremos uso de los emuladores que nos permitirn
ejecutar nuestro MIDlet.
6. Depuracin: Esta ltima fase nos permitir depurar los fallos detectados en la
fase anterior de nuestro MIDlet.
3.4.2 Instalacin
Las herramientas que vamos a usar para el desarrollo de MIDlets sern las siguientes:

31

J2ME: Aplicaciones Java para Dispositivos Mviles

Un editor de texto cualquiera como, por ejemplo, el Bloc de Notas o vid para
escribir el cdigo del MIDlet.
Un compilador estndar de Java. Haremos uso del SDK de J2SE que puede ser
descargado desde la direccin http://java.sun.com/j2se/1.4.1/download.html
Las APIs de la configuracin CLDC y del perfil MIDP que pueden ser descargadas
desde http://java.sun.com/j2me/download.html.
Lo primero que haremos ser instalar el SDK de J2SE. Una vez descargado el archivo
solo tendremos que hacer doble click sobre l e instalarlo en una carpeta en nuestro disco
duro (p.e. c:\jdk1.4.1). Una vez instalado aadiremos a nuestro path la carpeta anterior.
Para ello modificaremos la variable de entorno path a la que le aadiremos la carpeta
c:\jdk1.4.1\bin y crearemos una nueva variable de entorno llamada JAVA_HOME con el
valor c:\jdk1.4.1.
A continuacin instalaremos las APIs de CLDC y de MIDP. Con descargarnos las APIs
del perfil MIDP tenemos suficiente. Para ello solo tendremos que descomprimir el archivo
.zip descargado anteriormente en el lugar que deseemos (p.e. c:\midp2.0fcs). Al igual que
hicimos con anterioridad tendremos que aadir la direccin c:\midp2.0fcs\bin a la variable
path y adems tendremos que crear una nueva variable de entorno MIDP_HOME con el
valor c:\midp2.0fcs.
Para comprobar que hemos realizado correctamente la instalacin nos iremos a la
lnea de comandos y escribiremos lo siguiente:
java version
A continuacin escribiremos: midp versin
3.5 Configuraciones y perfiles
Configuraciones
Ya hemos mencionado algo anteriormente relacionado con las configuraciones. Para
tenerlo bien claro diremos que una configuracin es el conjunto mnimo de APIs Java que
permiten desarrollar aplicaciones para un grupo de dispositivos. stas APIs describen las
caractersticas bsicas, comunes a todos los dispositivos:
Caractersticas soportadas del lenguaje de programacin Java.
Caractersticas soportadas por la Mquina Virtual Java.
Bibliotecas bsicas de Java y APIs soportadas.
Como ya hemos visto con anterioridad, existen dos configuraciones en J2ME:
CLDC, orientada a dispositivos con limitaciones computacionales y de memoria y CDC,
orientada a dispositivos que no tienen tantas limitaciones como los CLDC. Ahora veremos
un poco ms en profundidad cada una de estas configuraciones.
32

J2ME: Aplicaciones Java para Dispositivos Mviles

Configuracin de dispositivos con conexin, CDC (Connected Limited Configuration)


La CDC est orientada a dispositivos con cierta capacidad computacional y de
memoria. Por ejemplo, decodificadores de televisin digital, televisores con internet,
algunos electrodomsticos y sistemas de navegacin en automviles. CDC usa una
Mquina Virtual Java similar en sus caractersticas a una de J2SE, pero con limitaciones
en el apartado grfico y de memoria del dispositivo. sta Mquina Virtual es la que hemos
visto como CVM (Compact Virtual Machine). La CDC est enfocada a dispositivos con las
siguientes capacidades:
Procesador de 32 bits.
Disponer de 2 Mb o ms de memoria total, incluyendo memoria RAM y ROM.
Poseer la funcionalidad completa de la Mquina Virtual Java2.
Conectividad a algn tipo de red.
La CDC est basada en J2SE v1.3 e incluye varios paquetes Java de la edicin
estndar. Las peculiaridades de la CDC estn contenidas principalmente en el paquete
javax.microedition.io, que incluye soporte para comunicaciones http y basadas en
datagramas. Algunas libreras incluidas en la CDC son:
Nombre de Paquete CDC
java.io
java.lang
java.lang.ref
java.net
java.lang.reflect
java.math
java.security
java.security.cert
java.text
java.util
javax.microedition.io

Descripcin
Clases e interfaces estndar de E/S.
Clases bsicas del lenguaje.
Clases de referencia.
Clases e interfaces de red.
Clases e interfaces de reflection
Paquete de matemticas
Clases e interfaces de seguridad
Clases de certificados de seguridad
Paquete de texto
Clases de utilidades estndar
Clases e interfaces para conexin genrica CDC.

Configuracin de dispositivos limitados con conexin, CLDC


(Connected Limited Device Configuration).
La CLDC est orientada a dispositivos dotados de conexin y con limitaciones en
cuanto a capacidad grfica, cmputo y memoria. Un ejemplo de stos dispositivos son:
telfonos mviles, buscapersonas (pagers), PDAs, organizadores personales, etc.
Ya hemos dicho que CLDC est orientado a dispositivos con ciertas restricciones.
Algunas de stas restricciones vienen dadas por el uso de la KVM, necesaria al trabajar
con la CLDC debido a su pequeo tamao. Los dispositivos que usan CLDC deben
cumplir los siguientes requisitos:
Disponer entre 160 Kb y 512 Kb de memoria total disponible.
33

J2ME: Aplicaciones Java para Dispositivos Mviles

Como mnimo se debe disponer de 128 Kb de memoria no voltil para la Mquina


Virtual
Java y las bibliotecas CLDC, y 32 Kb de memoria voltil para la Mquina Virtual en
tiempo de ejecucin.
Procesador de 16 o 32 bits con al menos 25 Mhz de velocidad.
Ofrecer bajo consumo, debido a que stos dispositivos trabajan con suministro de
energa limitado, normalmente bateras.
Tener conexin a algn tipo de red, normalmente sin cable, con conexin
intermitente y ancho de banda limitado (unos 9600 bps).
La CLDC aporta las siguientes funcionalidades a los dispositivos:
Un subconjunto del lenguaje Java y todas las restricciones de su Mquina
Virtual (KVM).
Un subconjunto de las bibliotecas Java del ncleo.
Soporte para E/S bsica.
Soporte para acceso a redes.
Seguridad.
Nombre de paquete CLDC
java.io
java.lang
java.util
javax.microedition.io

Descripcin
Clases y paquetes estndar de E/S. Subconjunto de J2SE.
Clases e interfaces de la Mquina Virtual. Subconj. de J2SE.
Clases, interfaces y utilidades estndar. Subconj. de J2SE.
Clases e interfaces de conexin genrica CLDC

La seguridad en CLDC es un aspecto muy a tener en cuenta. Esta configuracin


posee un modelo de seguridad sandbox al igual que ocurre con los applets.
En cualquier caso, una determinada Configuracin no se encarga del
mantenimiento del ciclo de vida de la aplicacin, interfaces de usuario o manejo de
eventos, sino que estas responsabilidades caen en manos de los perfiles.
Perfiles
Acabamos de decir que el perfil es el que define las APIs que controlan el ciclo de
vida de la aplicacin, interfaz de usuario, etc. Ms concretamente, un perfil es un conjunto
de APIs orientado a un mbito de aplicacin determinado.
Los perfiles identifican un grupo de dispositivos por la funcionalidad que
proporcionan (electrodomsticos, telfonos mviles, etc.) y el tipo de aplicaciones que se
ejecutarn en ellos. Las libreras de la interfaz grfica son un componente muy importante
en la definicin de un perfil. Aqu nos podemos encontrar grandes diferencias entre
interfaces, desde el men textual de los telfonos mviles hasta los tctiles de los PDAs.
El perfil establece unas APIs que definen las caractersticas de un dispositivo,
mientras que la configuracin hace lo propio con una familia de ellos. Esto hace que a la
hora de construir una aplicacin se cuente tanto con las APIs del perfil como de la
configuracin. Tenemos que tener en cuenta que un perfil siempre se construye sobre una
34

J2ME: Aplicaciones Java para Dispositivos Mviles

configuracin determinada. De este modo, podemos pensar en un perfil como un conjunto


de APIs que dotan a una configuracin de funcionalidad especfica.
Ya hemos visto los conceptos necesarios para entender cmo es un entorno de
ejecucin en Java Micro Edition. Este entorno de ejecucin se estructura en capas, una
construida sobre la.
Anteriormente vimos que para una configuracin determinada se usaba una
Mquina Virtual Java especfica. Tenamos que con la configuracin CDC usbamos la
CVM y que con la configuracin CLDC usbamos la KVM. Con los perfiles ocurre lo
mismo. Existen unos perfiles que construiremos sobre la configuracin CDC y otros que
construiremos sobre la CLDC. Para la configuracin CDC tenemos los siguientes perfiles:
Foundation Profile.
Personal Profile.
RMI Profile.

Arquitectura del entorno de ejecucin de J2ME.

y para la configuracin CLDC tenemos los siguientes:


PDA Profile.
Mobile Information Device Profile (MIDP).

Un perfil puede ser construido sobre cualquier otro. Sin embargo, una plataforma
J2ME slo puede contener una configuracin.
A continuacin vamos a ver con detenimiento cada uno de estos perfiles:
Foundation Profile: Este perfil define una serie de APIs sobre la CDC orientadas a
dispositivos que carecen de interfaz grfica como, por ejemplo, decodificadores de
35

J2ME: Aplicaciones Java para Dispositivos Mviles

televisin digital. Este perfil incluye gran parte de los paquetes de la J2SE, pero excluye
totalmente los paquetes java.awt Abstract Windows Toolkit (AWT) y java.swing que
conforman la interfaz grfica de usuario (GUI) de J2SE. Si una aplicacin requiriera una
GUI, entonces sera necesario un perfil adicional. Los paquetes que forman parte del
Foundation Profile se muestran en la Tabla 1.3.
Paquete del Foundation Profile
Descripcin
java.lang
Soporte del lenguaje Java
java.util
java.net
java.io
java.text
java.security

Aade soporte completo para zip y otras


funcionalidades (java.util.Timer)
Incluye sockets TCP/IP y conexiones HTTP
Clases Reader y Writer de J2SE
Incluye soporte para internacionalizacin
Incluye cdigos y certificados

Personal Profile: El Personal Profile es un subconjunto de la plataforma J2SE v1.3, y


proporciona un entorno con un completo soporte grfico AWT. El objetivo es el de dotar a
la configuracin CDC de una interfaz grfica completa, con capacidades web y soporte de
applets Java. Este perfil requiere una implementacin del Foundation Profile. La Tabla 1.4
nos muestra los paquetes que conforman el Personal Profile v1.0.
Paq. del Personal Profile
Descripcin
Clases necesitadas para crear applets o que son usadas
java.applet
por ellos
java.awt
C Clases para crear GUIs con AWT
java.awt.datatransfer
Clases e interfaces para transmitir datos entre aplicaciones
java.awt.event
Clases e interfaces para manejar eventos AWT
java.awt.font
Clases e interfaces para la manipulacin de fuentes
java.awt.im
Clases e interfaces para definir mtodos editores de entrada
java.awt.im.spi
Interfaces que aaden el desarrollo de mtodos editores de
entrada para cualquier entorno de ejecucin Java
java.awt.image
Clases para crear y modificar imgenes
Clases que soportan JavaBeans
java.beans
Interfaces que usa el Personal Profile para la comunicacin.
javax.microedition.xlet

RMI Pro ile: Este perfil requiere una implementacin del Foundation Profile se construye
encima de l. El perfil RMI soporta un subconjunto de las APIs J2SE v1.3 RMI. Algunas
caractersticas de estas APIs se han eliminado del perfil RMI debido a las limitaciones de
cmputo y memoria de los dispositivos. Las siguientes propiedades se han eliminado del
J2SE RMI v1.3:
Java.rmi.server.disableHTTP.
Java.rmi.activation.port.
36

J2ME: Aplicaciones Java para Dispositivos Mviles

Java.rmi.loader.packagePrefix.
Java.rmi.registry.packagePrefix.
Java.rmi.server.packagePrefix.
PDA Profile: El PDA Profile est construido sobre CLDC. Pretende abarcar PDAs de
gama baja, tipo Palm, con una pantalla y algn tipo de puntero (ratn o lpiz) y una
resolucin de al menos 20000 pixels (al menos 200x100 pixels) con un factor 2:1. No es
posible dar mucha ms informacin porque en este momento este perfil se encuentra en
fase de definicin.
Mobile Information Device Profile (MIDP): Este perfil est construido sobre la
configuracin CLDC. Al igual que CLDC fue la primera configuracin definida para J2ME,
MIDP fue el primer perfil definido para esta plataforma. Este perfil est orientado para
dispositivos con las siguientes caractersticas:
Reducida capacidad computacional y de memoria.
Conectividad limitada (en torno a 9600 bps).
Capacidad grfica muy reducida (mnimo un display de 96x54 pixels
monocromo).
Entrada de datos alfanumrica reducida.
128 Kb de memoria no voltil para componentes MIDP.
8 Kb de memoria no voltil para datos persistentes de aplicaciones.
32 Kb de memoria voltil en tiempo de ejecucin para la pila Java.
Los tipos de dispositivos que se adaptan a estas caractersticas son: telfonos
mviles, buscapersonas (pagers) o PDAs de gama baja con conectividad.
El perfil MIDP establece las capacidades del dispositivo, por lo tanto, especifica las APIs
relacionadas con:
La aplicacin (semntica y control de la aplicacin MIDP).
Interfaz de usuario.
Almacenamiento persistente.
Trabajo en red.
Temporizadores.
Paquetes del MIDP
javax.microedition.lcdui
javax.microedition.rms
javax.microedition.midlet
javax.microedition.io
java.io
java.lang

Descripcin
Clases e interfaces para GUIs
Record Management Storage. Soporte para el
almacenamiento persistente del dispositivo
Clases de definicin de la aplicacin
Clases e interfaces de conexin genrica
Clases e interfaces de E/S bsica
Clases e interfaces de la Mquina Virtual

Las aplicaciones que realizamos utilizando MIDP reciben el nombre de MIDlets (por
simpata con APPlets). Decimos as que un MIDlet es una aplicacin Java realizada
con el perfil MIDP sobre la configuracin CLDC. En los temas siguientes nos
37

J2ME: Aplicaciones Java para Dispositivos Mviles

centraremos en la creacin de estos MIDlets ya que es un punto de referencia para


cualquier programador de J2ME. Adems, desde un punto de vista prctico MIDP es el
nico perfil actualmente disponible.
3.6 . Instalacin y uso del Wireless Toolkit de Sun
En el mercado existen varias herramientas que nos pueden ayudar a la hora de
crear nuestros MIDlets. En esta oportunidad vamos a hacer uso de una de ellas, que
explicaremos a continuacin:
J2ME Wireless Toolkit 2.0 es simplemente un emulador al que le proporcionamos
las clases java ya creadas y podemos ver el MIDlet en ejecucin.
Instalacin del J2ME Wireless Toolkit 2.0
La herramienta J2ME Wireless Toolkit 2.0 puede ser descargada desde la direccin
http://java.sun.com/products/j2mewtoolkit/download-2_0.html. La instalacin de esta
herramienta es bastante sencilla ya que solo hay que iniciar el proceso de instalacin y
seguir los pasos que te indica el instalador.
Es posible trabajar independientemente con esta herramienta. A continuacin
vamos a ver como sera el proceso de desarrollo de un MIDlet usando tan solo el J2ME
Wireless Toolkit
.
El mdulo principal de esta herramienta es la llamada KToolBar. A travs de este
mdulo vamos a poder realizar distintos proyectos y ejecutarlos sobre un emulador.
El proceso que se realizara sera el siguiente:
En primer lugar habra que crear un nuevo proyecto al que le daramos un nombre
en concreto. A la hora de crear este proyecto se nos da la oportunidad de definir
ciertos atributos en el archivo JAD.
Una vez creado el proyecto, el entorno nos crea un sistema de directorios dentro
de la carpeta apps. Aqu nos creara una carpeta con el nombre del proyecto y
dentro de ella un conjunto de subdirectorios cuya estructura puede apreciarse en la
Figura 2.4.
En el subdirectorio src es donde se deben guardar los ficheros .java con elcdigo
fuente. En el directorio res guardaremos los recursos que utilice nuestro MIDlet. Si
usamos alguna librera adicional, debemos guardarla en el subdirectorio lib (Figura
2.5).

38

J2ME: Aplicaciones Java para Dispositivos Mviles

Una vez situados los archivos en los subdirectorios correspondientes tan slo
tendremos que compilar nuestro proyecto y ejecutarlo sobre el emulador.
Una vez que hayamos hecho todas las pruebas necesarias con nuestro MIDlet,
esta herramienta tambin nos da la posibilidad de empaquetar nuestro MIDlet y dejarlo de
esta manera, preparado para la descarga en un dispositivo real.

3.7 . Aplicaciones bsicas en J2ME


3.7.1. La primer aplicacin para moviles
En nuestro primer ejemplo de aplicaciones moviles vamos a utilizar "J2ME
Wireless Toolkit 2.0" que proporciona Sun. Aunque no nos ofrece una gran potencia a la
hora de desarrollar aplicaciones, Este entorno es el ms sencillo de utilizar. Tras la
instalacin del wireless toolkit, tendremos un nuevo submen en el men inicio con un
aspecto similar a ste:

Selecciona la aplicacin KToolBar e inicializa el entorno. Vers aparecer la ventana del


entorno.
39

J2ME: Aplicaciones Java para Dispositivos Mviles

Vamos a crear un nuevo proyecto, as que pulsamos el botn New Project. Nos solicitar
un nombre para el proyecto y otro para la clase principal de la aplicacin.

Tanto el proyecto como la clase principal se llamarn HelloWorld, as que introducimos


este nombre en ambos cuadros de texto y pulsamos el botn Create Project. En este
momento KToolBar crea la estructura de directorios necesaria para albergar el proyecto.

40

J2ME: Aplicaciones Java para Dispositivos Mviles

Cada una de las carpetas creadas tiene una misin concreta. Por ahora nos bastar saber
que nuestros archivos fuente irn emplazados en el directorio src, y los recursos
necesarios como grficos, sonidos, etc... se alojarn en el directorio res.
A diferencia de otros entornos de programacin, KToolBar no cuenta con un editor
integrado para editar los programas, por lo tanto vamos a utilizar uno externo. Puedes
utilizar el bloc de notas de Windows o tu editor favorito.
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class HelloWorld extends MIDlet implements CommandListener {
private Command exitCommand;
private Display display;
private Form screen;
public HelloWorld() {
// Obtenemos el objeto Display del midlet.
display = Display.getDisplay(this);
// Creamos el comando Salir.
exitCommand = new Command("Salir", Command.EXIT,2);
// Creamos la pantalla principal (un formulario)
screen = new Form("HelloWorld");
// Creamos y aadimos la cadena de texto a la pantalla
StringItem saludo = new StringItem("","Hola Mundo comova ?...");
screen.append(saludo);

41

J2ME: Aplicaciones Java para Dispositivos Mviles

// Aadimos el comando Salir e indicamos que clase lo manejar


screen.addCommand(exitCommand);
screen.setCommandListener(this);
}
public void startApp() throws MIDletStateChangeException {
// Seleccionamos la pantalla a mostrar
display.setCurrent(screen);
}
public void pauseApp() {
}
public void destroyApp(boolean incondicional) {
}
public void commandAction(Command c, Displayable s) {
// Salir
if (c == exitCommand) {
destroyApp(false);
notifyDestroyed();
}
}
}

No es necesario que comprendamos el programa ahora. Por el


momento simplemente lo vamos a almacenar en el directorio src que ha
creado KToolBar con el nombre HelloWorld.java. Es importante que el
nombre sea exactamente, ste incluidas maysculas y minsculas, ya
que el nombre de la clase principal tiene que ser idntico al nombre del
archivo que lo contiene. Una vez hecho esto, volvemos al entorno
KTooBar y pulsamos el botn Build. Si todo va bien, aparecer el texto
Build Complete. Ya tenemos nuestro programa compilado y podemos
ejecutarlo en el emulador. En el desplegable Device puedes seleccionar
el emulador que quieres utilizar. El DefaultColorPhone tiene soporte de
color, as que te resultar ms atractivo. Pulsa el botn Run. Vers
aparecer un emulador con forma de telfono mvil. En la pantalla del
mvil aparece un men con un slo programa llamado HelloWorld.
Pulsa select para ejecutarlo
Ahora que hemos comprobado que el programa funciona en el
emulador, estamos listos para empaquetar el programa y dejarlo listo
para descargar a un dispositivo real. En KToolBar despliega el men project, y selecciona
create package del submen package. KToolBar nos informa de que ha creado los
archivos HelloWorld.jar y HelloWorld.jad dentro del directorio bin. Estos son los archivos
que habremos de transferir al telfono mvil.
Resumen
Explicamos en esta unidad conceptos bsicos de java y como iniciarse en la
programacin en J2ME, desde el origen y caractersticas hasta crear nuestra primera
aplicacin.
42

J2ME: Aplicaciones Java para Dispositivos Mviles

En la prxima unidad abordaremos conceptos ms complejos y comenzaremos a


programar en un Entorno Integrado de Desarrollo (IDE).

Importante:
Busque informacin general sobre la plataforma J2ME en internet o
libros, para reforzar los contenidos estudiados hasta el momento.

43

Вам также может понравиться