Download Clase modelo - Logo - Instituto Tecnológico de Morelia

Document related concepts
no text concepts found
Transcript
J2ME
M.C. Juan Carlos Olivares Rojas
Department of Computer and System
Instituto Tecnológico de Morelia
[email protected]
http://antares.itmorelia.edu.mx/~jcolivar/
Disclaimer
Some material in this presentation has been
obtained from various sources, each of which
has intellectual property, so in this presentation
will only have some rights reserved.
These slides are free, so you can add, modify,
and delete slides (including this one) and slide
content to suit your needs. They obviously
represent a lot of work on my part. In return for
use, I only ask the following: if you use these
slides (e.g., in a class) in substantially unaltered
form, that you mention their source.
Objectives of the Session
• The students will develop different kind of
mobile applications usign J2ME framework aim
with NetBeans Mobility Pack.
J2ME
• La edición Java 2 Micro Edition fue
presentada en 1999 por Sun Microsystems
con el propósito de habilitar aplicaciones
Java para pequeños dispositivos.
• En esta presentación, lo que realmente se
enseñó fue una primera versión de una
nueva Java Virtual Machine (JVM) que podía
ejecutarse en dispositivos Palm.
J2ME
• Java Micro Edition es la versión del lenguaje
Java que está orientada al desarrollo de
aplicaciones para dispositivos pequeños con
capacidades restringidas tanto en pantalla
gráfica, como de procesamiento y memoria
(teléfonos móviles, PDA’s, Handhelds,
Pagers, etc).
Versiones de Java
J2ME
• Un entorno de ejecución de J2ME se
compone de:
•
•
•
•
Máquina virtual.
Configuración.
Perfil.
Paquetes Opcionales.
J2ME
• Las diferentes tecnologías Java comparten
un conjunto más o menos amplio de APIs
básicas
del
lenguaje,
agrupadas
principalmente en los paquetes java.lang y
java.io.
• J2ME contiene una mínima parte de las APIs
de Java. J2ME usa 37 clases de la
plataforma J2SE provenientes de los
paquetes java.lang, java.io, java.util.
J2ME
• J2ME a diferencia de J2SE utiliza una
máquina virtual distinta de la clásica JVM
denominada KVM.
• Esta KVM tiene unas restricciones que hacen
que no posea todas las capacidades
incluidas en la JVM. J2ME es un subconjunto
de J2SE (excepto por el paquete
javax.microedition).
J2ME
• Las configuraciones, que son un conjunto de
clases básicas orientadas a conformar el
corazón de las implementaciones para
dispositivos de características específicas.
Existen 2 configuraciones definidas en J2ME:
• Connected Limited Device Configuration
(CLDC) enfocada a dispositivos con
restricciones de procesamiento y memoria.
La VM (Virtual Machine) de la configuración
CLDC se denomina KVM.
J2ME
• Connected Device Configuration (CDC)
enfocada a dispositivos con más recursos. La
VM (Virtual Machine) de la CDC se denomina
CVM.
J2ME
• No hay soporte para tipos de punto flotante,
no existen los tipos double ni float (MIDP
1.1).
• No existe soporte para JNI (Java Native
Interface).
• Limitada capacidad para el manejo de
excepciones
J2ME
J2ME
• La CVM (Compact Virtual Machine) ha sido
tomada como Máquina Virtual Java de
referencia para la configuración CDC y
soporta las mismas características que la
Máquina Virtual de J2SE.
• Está orientada a dispositivos electrónicos con
procesadores de 32 bits de gama alta y en
torno a 2Mb o más de memoria RAM.
J2ME
J2ME
NOMBRE DE PAQUETE CDC
java.io
java.lang
java.lang.ref
java.lang.reflect
java.math
java.net
java.security
java.security.cert
java.text
java.util
java.util.jar
java.util.zip
javax.microedition.io
NOMBRE DE PAQUETE CLDC
java.io
java.lang
java.util
javax.microedition.io
DESCRIPCION
Clases de interfaces estándar de E/S.
Clases básicas del lenguaje.
Clases de referencia.
Clases e interfaces de reflection.
Paquete de matemáticas.
Clases e interfaces de red.
Clases e interfaces de seguridad.
Clases de certificados de seguridad.
Paquete de texto.
Clases de utilidades estándar.
Clases y utilidades para archivos .JAR.
Clases y utilidades para archivos ZIP y comprimidos.
Clases e interfaces para conexión genérica CDC.
DESCRIPCION
Clases y paquetes estándar de E/S. Subconjunto de J2SE.
Clases e interfaces de la Máquina Virtual. Subconjunto de J2SE.
Clases, interfaces y utilidades estándar. Subconjunto de J2SE.
Clases e interfaces de conexión genérica CLDC.
J2ME
• Los perfiles identifican un grupo de
dispositivos por la funcionalidad que
proporcionan (electrodomésticos, teléfonos
móviles, etc.) y el tipo de aplicaciones que se
ejecutarán en ellos.
• Las librerías de la interfaz gráfica son un
componente muy importante en la definición
de un perfil. Aquí nos podemos encontrar
grandes diferencias entre interfaces, desde el
menú textual de los teléfonos móviles hasta
J2ME
• Para la configuración CDC tenemos los
siguientes perfiles:
• Foundation Profile.
• Personal Profile.
• RMI Profile.
• Para la configuración CLDC tenemos los
siguientes:
• PDA Profile.
• Mobile Information Device Profile (MIDP).
J2ME
J2ME
PAQUETES DEL FOUNDATION PROFILE
java. Lang
java.util
java.net
java.io
java.text
java.security
DESCRIPCION
Soporte del lenguaje.
Añade 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 internacionalización.
Incluye códigos y certificados.
PAQUETES DEL PERSONAL PROFILE
java. applet
java.awt
java.awt.datatransfer
java.awt.event
java.awt.font
java.awt.im
java.awt.im.spi
java.awt.image
java.beans
javax.midlet.xlet
DESCRIPCION
Clases necesitadas para crear applets o que son usadas por ello.
Clases para crear GUIs con AWT.
Clases e interfaces para transmitir datos entre aplicaciones.
Clases e interfaces para manejar eventos AWT.
Clases e interfaces para manipulación de fuentes.
Clases e interfaces para definir métodos editores de entrada.
Interfaces que añaden el desarrollo de métodos editores de entrada.
Clases para crear y modificar imágenes.
Clases que soportan JavaBeans .
Interfaces que usan el Personal Profile para la comunicación.
J2ME
PAQUETES DEL MIDP
javax.microedition.Icdui
javax.microedition.rms
javax.microedition.midlet
javax.microedition.io
java.io
java.lang
java.util
DESCRIPCION
Clases e interfaces para GUIs.
Soporte para el almacenamiento persistente del dispositivo.
Clases de definición de la aplicación.
Clases e interfaces de conexión genérica.
Clases e interfaces de E/S básica.
Clases e interfaces de la Máquina Virtual.
Clases e intefaces de utilidades estándar.
J2ME
• El proceso para llevar a cabo la creación de
un MIDlet es el siguiente:
•
•
•
•
•
Crear el MIDlet
Escribir el código y compilar.
Preverificar el código.
Empaquetar en JAR y crear el archivo JAD.
Ejecutar el emulador.
J2ME
• Las aplicaciones MIDP deben implementar
los siguientes tres métodos:
• startApp (): Este método es utilizado para la
ejecución del MIDlet. Su objetivo es ejecutar
la aplicación y solicitar recursos.
• pauseApp (): Este método es invocado por el
sistema para solicitarle al MIDlet que haga
una pausa. Libera los recursos adquiridos por
el método starApp ().
J2ME
• destroyApp (boolean unconditional): Este
método es llamado por el sistema antes de
que sea destruido el MIDlet. Además libera
todos los recursos adquiridos.
• Los MIDlets son empaquetados en carpetas
.JAR junto a imágenes, logos, para formar
una MIDlet suite.
J2ME
J2ME
• Cada archivo .JAR lleva asociado un archivo
.JAD (Java Application Descriptor, Descriptor
de Aplicación Java) que es utilizado para
gestionar la instalación.
• El archivo .JAM (Java Application Manager,
Manejador de Aplicaciones Java) es el
encargado de gestionar la descarga y la
instalación de los MIDlets.
J2ME
• Los MIDlets tienen atributos obligatorios y
opcionales
ATRIBUTOS OBLIGATORIOS
MIDlet-Name
MIDlet-Versión
MIDlet-Vendor
MIDlet-<n> (name, icon, class)
MicroEdition-Profile
MicroEdition-Configuration
ATRIBUTOS OPCIONALES
MIDlet-Description
MIDlet-Icon
MIDlet-Info-URL
MIDlet-Data-Size
J2ME
• Para poder instalar un MIDlet en un teléfono
celular del cliente se siguen los siguientes
pasos:
• Paso 1: El Cliente pide una el fichero JAD.
• Paso 2: El fichero JAD es descargado al
Cliente.
• Paso 3: El JAM verifica el archivo JAD.
• Paso 4: Se descarga la MIDlet suite al
Cliente.
J2ME
J2ME
J2ME
J2ME
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class hola extends MIDlet {
private Display pantalla;
private Form formulario = null;
public hola() {
pantalla = Display.getDisplay(this);
formulario = new Form("Hola Mundo");
}
J2ME
public void startApp(){
pantalla.setCurrent(formulario);
}
public void pauseApp(){
}
public
void
destroyApp(boolean
unconditional){
pantalla = null;
formulario = null;
notifyDestroyed();
}}
J2ME
• La clase Display representa el manejador de
la pantalla y los dispositivos de entrada.
• Todo MIDlet debe poseer por lo menos un
objeto Display.
• En este objeto Display podemos incluir tantos
objetos Displayable como queramos.
J2ME
• La clase Display puede obtener información
sobre las características de la pantalla del
dispositivo donde se ejecute el MIDlet,
además de ser capaz de mostrar los objetos
que componen nuestras interfaces.
• Todo MIDlet debe poseer al menos una
instancia del objeto Display. Para obtenerla
se utiliza:
J2ME
• Dentro del método startApp tendremos que
hacer referencia a la pantalla que queramos
que esté activa haciendo uso del método:
setCurrent()
• Hay que tener en cuenta que cada vez que
salimos del método pauseApp, entramos en
el método startApp, por lo que la construcción
de las pantallas y demás elementos que
formarán parte de nuestro MIDlet la
J2ME
J2ME
javax.microedition.lcdui
• Interfaces:
•
•
•
•
Choice
CommandListener
ItemCommandListener
ItemStateListener
javax.microedition.lcddui
•
•
•
•
•
•
•
•
•
Alert
AlertType
Canvas
ChoiceGroup
Command
CustomItem
DateField
Display
Displayable
javax.microedition.lcdui
•
•
•
•
•
•
•
•
•
Font
Form
Gauge
Graphics
Image
ImageItem
Item
List
Screen
javax.microedition.lcdui
•
•
•
•
•
Spacer
StringItem
TextBox
TextField
Ticket
javax.microedition.lcdui.game
•
•
•
•
•
GameCanvas
Layer
LayerManager
Sprite
TiledLayer
• Los IDEs más recientes nos permiten mostrar
información de las clases y objetos a través
de etiquetas inteligentes.
J2ME
• Muchas de las funcionalidades básicas de
Java se pueden implantar de manera directa
en J2ME como el manejo de primitivas
gráficas.
• La clase más básica es la Graphics, la cual
tiene métodos que nos permiten dibujar sobre
un lienzo Canvas.
J2ME
• Generalmente se utilizan dentro del método
paint() de un Applet o de una aplicación
gráfica.
• Los métodos repaint() y update son variantes
del método paint().
J2ME
• El método repaint() se utiliza cuando se
desea volver a dibujar la pantalla (lo cual es
muy frecuente en los sistemas gráficos
multitarea) y dibuja toda la pantalla. El
método update() sólo actualiza una región de
la pantalla. Muy utilizado en componentes
gráficos como botones o listas desplegables.
J2ME
• La clase Graphics se encuentra dentro del
paquete java.awt.*;
• El método drawString() permite dibujar una
cadena de texto en la pantalla.
• El método drawLine() dibuja una línea en la
pantalla. El método drawRectangle() permite
dibujar un rectángulo en pantalla.
J2ME
• El método drawOval permite definir óvalos y
circulos. El método drawImage() permite
mostrar imágenes en pantallas.
• El método clearRect() permite borrar un área
de la pantalla. El método copyArea() copia
un área de memoria. Esto se utiliza en los
métodos de recorte (clip).
• Métodos como drawPolygon y drawPolyline()
permiten definir figuras más elaboradas.
J2ME
• Los métodos que inician con fill, como
fillOval(), fillRect(), etc., realizan las mismas
figuras pero pintan el relleno de las figuras.
• Otros elementos a considerar para el manejo
de gráficos son el color y las fuentes (tipos de
letras). Java define clases para manipular
estos objetos gráficos de manera amplia.
J2ME
• Los métodos getFont(), setFont(), getColor()
y setColor() permiten manipular fuentes y
colores.
• La clases Font y Color se encuentran
definidas también en java.awt.*
• El método translate() de Graphics() permite
cambiar el punto de referencia que de
manera predeterminada es 0,0 para esquina
superior izquierda.
J2ME
• La clase Color define el modelo de color a
emplear, cuenta con algunas constantes para
cada tipo de color como orange, yellow,
darkgray, etc. El color está dado por tres
valores uno para el rojo, otro para el verde y
otro para el azul.
• Se cuentan además con métodos para
manipular los atributos de la clase.
J2ME
• La clase Font permite el manejo de fuentes
en pantalla. El constructor de esta clase
recibe tres argumentos: el nombre de la
fuente, el estilo de la fuente y el tamaño.
• El estilo de la fuente está definido por tres
constantes PLAIN (normal), BOLD (negrita) e
ITALIC (cursiva). Se cuenta además con
métodos auxiliares para manipular los
atributos de la clase.
J2ME
• Una fuente no es otra cosa que una colección
de imágenes que representan los caracteres
de un sistema.
• Se cuenta además con la clase FontMetrics
que define algunas métricas de la fuente:
altura, bajada, la subida, la interlínea, etc.
J2ME
• También se pueden dibujar figuras 3D muy
sencillas con métodos como draw3DRect y
fill3DRect que dan profundidad a las
imágenes.
• Algunas de estas funcionalidades dependen
del perfil y de la configuración del dispositivo.
Introducción
• Se puede obtener el contexto gráfico de una
imagen y manipularla como si fuera un objeto
Graphics. Ejemplo:
Font
letra
=
Font.getFont(Font.FACE_MONOSPACE,
Font.SIZE_SMALL, Font.STYLE_PLAIN);
Image
logo
=
Image.createImage(letra.stringWidth(“Hi!”))
Graphics gr = logo.getGraphics();
…
J2ME
• Existen algunas APIs especiales para el
manejo de gráficos en dispositivos móviles
como
los
definidos
por
Nokia
(com.nokia.mid.ui) que contiene clases como
DirectGraphics.
• También se pueden manejar otro tipos de
elementos como multimedia, sprites, etc.
También se cuenta con la clase Graphic3D
para gráficas en 3D.
J2ME
• Realizar un programa que implemente a
través de un formulario la graficación de las
funciones: x2 + 1, 3x2 - 1, x+1 y x3 + x -5.
• El usuario dará los posibles valores de X en
un formulario de 5 elementos.
• Nótese que no hay una clase visual para
desarrollar gráficos en NetBeans.
J2ME
• También se puede realizar la conexión a
redes, para ello se deberá utilizar el paquete
javax.microedition.io.*
• Se deberá definir una conexión a través de la
clase StreamConnection, abriendo buffers de
entrada y salida con las clases InputStream y
OutputStream Respectivamente.
• Conexión = Connector.open(URL);
J2ME
• out = conexión.openOutputStream();
• In = conexión.openInputStream();
• Se lee el flujo con in(), se sugiere almacenar
los datos en un StringBuffer e ir agregando
datos con el método append()
• Se puede mejorar las conexiones si se utiliza
el objeto HttpConnection, aunque sólo aplica
a conexiones Web.
J2ME
• La información hasta ahora manejada ha sido
de tipo no persistente, de tal forma que al
terminar la aplicación y volverla a ejecutar,
no se pueden recuperar los datos.
• Para lograr persistencia se requiere de la
manipulación de archivos, elemento que no
está presente en la mayoría de los
dispositivos móviles con CLDC/MIDP.
J2ME
• Para lograr la persistencia se requiere de un
motor de persistencia conocida como RMS
(Record Management System) que no es otra
cosa que una pequeña base de datos
empotrada en el dispositivo.
• La unidad básica de almacenamiento de la
información es el registro (record), ubicado
en un almacén de registros (record store).
J2ME
• Antes de operar un registro se debe abrir o
crear. Las operaciones pueden ser de lectura
y escritura.
• Se utiliza el paquete javax.microedition.rms.*
• La clase RecordStore tiene los siguientes
métodos:
• openRecordStore()
• closeRecordStore()
J2ME
•
•
•
•
•
•
•
deleteRecordStore()
getName()
getNumRecords()
addRecord()
getRecord()
deleteRecord()
enumerateRecords()
J2ME
• Se cuentan con las interfaces de:
– RecordEnumeration
– RecordComparator
– RecordFilters
– RecordListener
• Los datos a agregar deben estar en formato
de un arreglo de bytes
• rs.addRecord(bytes, 0, bytes.length)
J2ME
• Se puede heredar de la clase Canvas e
implementar la interfaz Command Listener
• La clase Canvas puede recidir en un archivo
aparte siempre y cuando este en el mismo
paquete.
• La clase de gráficos debe contar con algún
comando para poder salir o regresar de la
pantalla.
References
• Ferreira, R (2008). Curso de Programación en
J2ME. Instituto Tecnológico de Morelia.
• Prieto (2004). Desarrollo de Juegos con J2ME,
Editorial Alfaomega Ra-Ma, España.
¿Preguntas?