J2ME M.C. Juan Carlos Olivares Rojas Department of Computer and System Instituto Tecnol贸gico de Morelia jcolivar@itmorelia.edu.mx 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
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?