J2ME
Tecnología java para dispositivos con recursos limitados
Java 2 Micro Edition
J2ME es una versión de la plataforma J2SE adaptada a las
limitaciones de los móviles, PDA’s y muchos dispositivos
con capacidad limitada.
Limitaciones de los dispositivos



Memoria Reducida (entre 128Kb y 2Mb aprox.)
Poca potencia computacional (processadores
de 16 o 32 bits)
Pantallas pequeñas (mínimo de 97 x 54 pixels)
Arquitectura de J2ME
Perfiles
Configuraciones
Máquina
Virtual
SO
MIDP
PDAP
FP
PBP
PP
JSR 37
JSR 75
JSR 46
JSR 129
JSR 62
CLDC
CDC
JSR 30
JSR 36
KVM
CVM
Kilobyte virtual machine
Compact virtual machine
Depende del dispositivo
Configuraciones
Las configuraciones proveen la base funcional para un rango
de dispositivos con características similares.
Especifican los siguientes aspectos:
- El subconjunto del lenguaje java que puede ser usado.
- El subconjunto de funciones de la Máquina Virtual Java.
- Las APIs fundamentales para este tipo de desarrollo.
- Los requerimientos de hardware de los dispositivos
enfocados a ésta.
Configuraciones
Actualmente existen dos configuraciones:


Connected Limited Device Configuration (CLDC):
Está diseñada para dispositivos con conexión intermitente,
poco procesador, y memoria limitada como los teléfonos
móviles y PDA´s (procesador de 16-32 bits y memorias de
128Kb como mínimo).
Connected Device Configuration (CDC):
Está diseñada para equipos con más memoria, procesadores
más rápidos y conexiones de mayor ancho de banda, sistemas
telemáticos de vehículos o computadores de mano de gran
capacidad (procesador de 32 bits y memoria de 2Mb o más).
Perfiles
Un perfil define un conjunto de APIs características
comunes para un conjunto de dispositivos.
Mobile Information Device Profile
MIDP es un perfil diseñado para desarrollar aplicaciones
enfocadas a móviles, PDA’s y dispositivos soportados por
la configuración CLDC.
Se encarga de las siguientes funcionalidades:
- Interfaz de usuario (javax.microedition.lcdui)
- Funciones de red (añade funciones a javax.microedition.io)
- Almacenamiento persisitente (javax.microedition.rms)
MIDP 1.0 y 2.0
La versión más reciente es la 2.0 (sobre CLDC 1.1), sin
embargo, la mayor parte de dispositivos que hay en el
mercado actual funcionan sobre MIDP 1.0 (CLDC 1.0).
MIDP 2.0
MIDP 1.0
CLDC
Javax.microedition.media
Javax.microedition.lcdui.game
Javax.microedition.pki
Javax.microedition.lcdui
Javax.microedition.midlet
Javax.microedition.rms
Java.io
Java.util
Java.lang
Javax.microedition.io
Diferencias entre MIDP y J2SE






Tipos de datos: CLDC no soporta los tipos float y double (son
muy costosos).
Preverificación: J2SE verifica el código en tiempo de ejecución.
En J2ME una parte se verifica antes (fuera del dispositivo)
reduciendo así la carga de la máquina.
Descriptor y manifiesto: Cada aplicación incluye archivos
adicionales con información referente a las aplicaciones.
No hay recolector de basura: Hay que eliminar de forma
explícita los elementos que no vayan a usarse más.
La máquina virtual: La KVM es una versión reducida de la JVM
diseñada para dispositivos limitados.
No hay “main”: El equivalente sería la función startApp().
Javax.microedition.midlet
Las aplicaciones midp heredan de la la classe MIDLet. Ésta
es la encargada de gestionar el ciclo de vida de la aplicación,
mediante las funciones startApp, pauseApp y destroyApp.
Javax.microedition.lcdui
Este paquete contiene las clases necesarias para
implementar la interficie de usuario.
Javax.microedition.lcdui



Por cada MIDlet tenemos una instancia de
la clase Display.
La aplicación llama al método getDisplay()
desde la constructora para poder referenciar
a dicha instancia.
Los Displayable se emplazan en la display
mediante la función setCurrent(Displayable)
Javax.microedition.lcdui
La calse Displayable tiene dos descendientes:
- Canvas: Permite el control total de la pantalla a
bajo nivel. Se usa en aplicaciones que capturan
eventos y realizan llamadas gráficas. Llama al
método paint(Graphics) para dibujar en la pantalla.
- Screen: Ofrece estructuras predefinidas (Form,
Alert, TextBox, List). No accede a las características
nativas del dispositivo. Permite un mayor grado de
portabilidad.
Javax.microedition.lcdui
El manejo de eventos utiliza dos componentes:
- Command: Es un generador de eventos que
podemos asociar a un displayable mediante el
método addCommand(Command).
- CommandListener: Es una interfaz que permite
escuchar eventos generados por Commands al
objeto que la implemeta. Se invoca al método
CommandAction(Command,Displayable) cada vez
que se produce un nuevo evento. Se asocia a un
Displayable con el método de esta clase
setCommandListener(CommandListener).
Javax.microedition.lcdui.game


MIDP 2.0 incorpora
este paquete diseñado
especialmente para el
desarrollo de juegos.
Ofrece una subclase de
Canvas que permite
trabajar con layers o
capas y controlar
colisones entre éstas.
Javax.microedition.lcdui.game

GameCanvas: Canvas con capacidades adicionales.
- Los métodos getGraphics() y flushGraphics(g) nos
permiten trabajar off-screen.
- El método getKeyState() permite trabajar por encuesta o
polling y consultar en todo momento la tecla pulsada.

LayerManager:Permite la gestión de los layers.
- Mediante el método append(Layer) le asignamos layers.
- setViewWindow(x,y,width,height) define la región de la
pantalla donde seran visibles los layers asignados.

Layer: Clase abstracta que representa un elemento
visual de la aplicación.
- Todas sus subclases deben implementar el método
paint(Graphics).
Javax.microedition.lcdui.game

Sprite: Consiste en un layer formado por una
secuencia de imágenes para realizar animaciones.
- Sprite(Image,width,height) crea el Sprite a partir de la
imagen y el tamaño de sus secciones.
- Ofrece métodos para controlar colisiones con otros layers.
Javax.microediton.lcdui.game

TiledLayer: Esta compuesto por una parrilla de tiles
en la que a cada uno podemos asignarle secciones
de una imagen.
- tiledLayer(cols,rows,img,width,height)
-Permite crear tiles animados llamando al método
int createAnimatedTile(tileIndex) i modificarlo mediante
setAnimatedTile(animatedTileIndex,staticTileIndex)
Imágenes


MIDP sólo acepta el formato png.
Hay varias maneras de mostrar imágenes:
- Un archivo incluido en el MIDlet.
- Un array de bytes:
- Almacenado en memoria persistente
- Descargado de un servidor
- Incluído en el propio programa

El método createImage de la classe Image
ofrece todas estas possibilades.
Javax.microedition.rms
Este paquete proporciona una
clase (RecordStore) y varias
interfaces para el almacenamiento
persistente.
Consiste en un mecanismo simple
orientado a registros que permite
guardar datos, salir de la aplicación
y recuperarlos en una ejecución
posterior.
La clase RecordStore es una colección
de registros en la que cada uno se
identifica por un entero (Record ID).
Javax.microedition.rms



La interface RecordListener permite
monitorizar los cambios en un RecordStore.
Cuando se modifica un RecordStore se lanza
un evento al RecordListener asociado.
Hay 3 tipos de eventos:



recordAdded(RecordStore rs,int recordId)
recordChanged(RecordStore rs,int recordId)
recordDeleted(RecordStore rs,int recordId)
Javax.microedition.io

Contiene varias interfaces que ofrecen
distintas posibilidades de comunicación.

La clase connector permite crear las
conexiones:
Connection connector.open(String url)
url = [protocol] : [dirección]

Valores de protocol





http
Datagram
Comm
File
Socket
Estructura básica de una aplicación
import java.lang.*;
// Packetes cldc, midp y opcionales
…
public class NetClientMIDlet extends MIDlet implements CommandListener {
private Display display;
private Form form;
private Command exit;
…
public NetClientMIDlet() {
display = Display.getDisplay(this);
…}
Public void startApp(){
form.setCommandListener(this);
display.setCurrent(form);
…}
public void pauseApp() {
…}
public void destroyApp() {
…}
public void commandAction(Command
if (c == exit) destroyApp();
…}
// Interficie de usuario
// Objeto Displayable
// Commando
// Inicialización de la interficie
// Gestor de eventos
// Asignación de la pantalla
c, Displayable d) {
// Tratamiento de eventos
Instalación de las aplicaciones
Cuando compilamos una aplicación con el Wireless
toolkit se generan 2 ficheros:
- JAR: Contiene todas las clases e imágenes que usa la
aplicación y un fichero llamado manifiesto con información
sobre su contenido (versión, midlets, etc…)
- JAD: Es igual que el manifiesto y adicionalmente incluye
una entrada con la url donde se encuentra el jar y otra
con su tamaño. Solo hace falta este fichero para instalar la
aplicación ya que durante la instalación se descarga
automaticamente el jar de la url especificada.
Herramientas para el desarrollo

Java 2 SDK versión 1.4 o superior

J2ME Wireless Toolkit

Entorno de Desarrollo Visual (IDE)
Opcional. SunONE, JBuilder (Mobile Set),
NetBeans.
Bibliografia

Toda la información usada para desarrollar este
documento ha sido obtenida en las siguientes
direcciones:
- http://java.sun.com/j2me/
- http://www.forum.nokia.com
- http://www.microjava.com
Descargar

J2ME - Seminaris d'empresa 2015