Présentation de Java Micro Edition

Transcription

Présentation de Java Micro Edition
Présentation Java ME
Présentation de Java Micro Edition
Sommaire
1. Généralités............................................................................................................................................................2 2. Vue d’ensemble des packages de CLDC 1.1 et de MIDP 2.0..............................................................................4 2.1. Packages de la configuration CLDC 1.1.......................................................................................................4 2.2. Packages du profil MIDP 2.0 ........................................................................................................................4 2.3. Documentation de référence ........................................................................................................................4 3. Les interfaces graphiques de MIDP 2.0 ...............................................................................................................4 3.1. Architecture des interfaces graphiques ........................................................................................................4 3.2. Hiérarchie des classes graphiques MIDP 2.0...............................................................................................5 3.3. Description des composants graphiques de haut niveau .............................................................................6 3.3.1.1. Les écrans « Alert » ..........................................................................................................................6 3.3.1.2. Les écrans « List »............................................................................................................................6 3.3.1.3. Les écrans « TextBox » ....................................................................................................................6 3.3.1.4. Les écrans « Form » .........................................................................................................................7 3.3.1.5. Les éléments “ChoiceGroup” ............................................................................................................7 3.3.1.6. Les éléments “DateField”..................................................................................................................8 3.3.1.7. Les éléments “Gauge” ......................................................................................................................8 3.3.1.8. Les éléments “ImageItem” ................................................................................................................8 3.3.1.9. Les éléments “StringItem”.................................................................................................................8 3.3.1.10. Les éléments “TextField” ..............................................................................................................8 3.3.1.11. Les éléments “Ticker” ...................................................................................................................8 3.3.1.12. Les éléments “Spacer”..................................................................................................................8 3.3.1.13. Les éléments “CustomItem”..........................................................................................................9 4. Les applications Java ME .....................................................................................................................................9 4.1. Présentation des MIDlets..............................................................................................................................9 4.2. Fichiers JAD et JAR......................................................................................................................................9 5. Exemple de MIDlet simple : HelloWorld. ..............................................................................................................9 5.1. Code source et exécution .............................................................................................................................9 5.2. Définition de la classe HelloWorld ..............................................................................................................11 5.3. Les attributs de la classe ............................................................................................................................12 5.4. Le constructeur ...........................................................................................................................................12 5.5. Les méthodes du cycle de vie ....................................................................................................................12 5.6. La gestion des événements........................................................................................................................13 5.7. Remarques .................................................................................................................................................13 BTS iris - Lycée Eiffel - Armentières
Page 1 sur 13
09/02/2007
Présentation Java ME
1. Généralités
Java existe sous différentes plateformes.
J2ME (Java 2 Micro Edition) est le Java de la mobilité. C'est le Java tournant sur les terminaux légers (systèmes
embarqués comme un téléphone portable ou un PDA). J2ME utilise le même langage et les mêmes outils que les
versions J2SE et J2EE de Java, mais avec un jeu d’API réduit.
La plateforme J2ME est divisée en trois parties : les configurations, les profils et les packages optionnels.
BTS iris - Lycée Eiffel - Armentières
Page 2 sur 13
09/02/2007
Présentation Java ME
Profile
Une configuration définit les
API de base en fonction des
ressources matérielles
disponibles.
Vendor-specific
Classes (OEM)
Un profil définit un ensemble
d’API pour une famille de
périphériques.
Optional packages
Applications
Configuration
JSR
(Java Specification Request)
Native Operating System
Device / Hardware
La configuration représente le socle de J2ME. Elle est constituée de la machine virtuelle KVM (Kilobyte Virtual
Machine) et des librairies bas niveaux pouvant être utilisées sur un certain type de matériel (habituellement un
sous ensemble des API de J2SE). La configuration garantit la portabilité et l'interopérabilité du code entre les
différents types de terminaux mobiles.
Il existe actuellement deux type de configurations : CDC (Connected Device Configuration) et CLDC (Connected
Limited Device Configuration). Leur utilisation est fonction du type de matériel où s’exécutera l’environnement
Java. CLDC est la configuration utilisée sur les petits appareils sans fils avec une connexion réseau intermittente
(téléphones portables, PDA).
Le profil ajoute des API plus spécifiques à la configuration. C'est lui qui prend en charge les fonctionnalités de plus
haut niveau. Les profils incluent des API pour contrôler le cycle de vie d’une application, pour construire l’interface
graphique, … Grâce aux API, de la configuration et du profil, on dispose d’un environnement complet pour
construire des applications.
Les terminaux utilisant la configuration CLDC doivent également utiliser le profil MIDP (Mobile Information Device
Profil). Les appareils « compatibles MIDP » sont les plus courants. De fait, la spécification « Java Technology for
the Wireless Industry » (JSR 185 ou JTWI) assemble CLDC 1.0 ou 1.1 et MIDP 2.0 pour créer un environnement
de développement J2ME standard.
Les packages optionnels fournissent des fonctionnalités supplémentaires non associées à une configuration ou à
un profil. Par exemple, l’API Bluetooth (JSR 82), qui fournit des méthodes pour utiliser le réseau Bluetooth, peut
être implémentée sur n’importe quelle combinaison de configurations et de profils.
Les spécifications de J2ME, comme pour J2SE et J2ME, sont développées sous l’égide de l’organisation JCP
(Java Community Process). Chaque spécification est définie par un numéro de JSR (Java Specification Request).
Par exemple :
¾
¾
¾
API Bluetooth : JSR 82
CLDC 1.1 : JSR 139
MIDP 2.0 : JSR 118
BTS iris - Lycée Eiffel - Armentières
Page 3 sur 13
09/02/2007
Présentation Java ME
2. Vue d’ensemble des packages de CLDC 1.1 et de MIDP 2.0
2.1. Packages de la configuration CLDC 1.1
java.io
java.lang
java.util
javax.microedition.io
Classes d’entrées / sorties à travers des data streams
Classes fondamentales du langage Java, sous-ensemble des classes standards
du package java.lang de J2SE (types de données, …)
Classes utilitaires (Calendar, Date, Vector, …)
Classes générales pour les fonctions réseau (GCF : Generic Connection
framework)
2.2. Packages du profil MIDP 2.0
java.lang
java.util
javax.microedition.io
javax.microedition.lcdui
javax.microedition.media
javax.microedition.midlet
javax.microedition.pki
javax.microedition.rms
Extension de java.lang de CLDC 1.1
Extension de CLDC 1.1
Extension du GCF (communications http, udp, socket, …).
Interface utilisateur (composants graphiques, gestion de l’écran, actions,
listener …)
Gestion du son.
Définition des applications MIDP et leurs interactions avec l’environnement.
Gestion du cycle de vie de l’application.
Certificats pour l’authentification des connexions sécurisées.
Gestion des données persistantes.
2.3. Documentation de référence
Vous trouverez une information détaillée de ces packages (interfaces, classes, méthodes, exceptions, …) dans
les fichiers « javadocs » de MIDP 2.0 et CLDC 1.1.
¾
Documentation officielle sur MIDP 2.0
http://www4.ac-lille.fr/~irisarmentieres/media/terminauxmobiles/midp-2_0-fr-spec.zip
¾
Documentation officielle sur CLDC 1.1
http://www4.ac-lille.fr/~irisarmentieres/media/terminauxmobiles/Appendix2-javadocs.zip
3. Les interfaces graphiques de MIDP 2.0
3.1. Architecture des interfaces graphiques
Les classes graphiques du paquetage javax.microedition.lcdui peuvent se diviser en deux groupes :
les classes de haut niveau et les classes de bas niveau.
Les classes de haut niveau : Screen et toutes les classes qui en dérivent.
Les classes de haut niveau ont un haut niveau d’abstraction par rapport au matériel. Elles sont donc
particulièrement recommandées pour programmer des interfaces utilisateurs compatibles avec tous les
périphériques MIDP 2.0. Evidemment, cela veut dire que le programmeur a peu de contrôle sur le rendu
graphique de ses interfaces. L’aspect visuel dépendra fortement des capacités du périphérique sur lequel
s’exécute le programme.
Les classes de bas : niveau : Canvas et Graphics
Les classes de bas niveau permettent d’avoir un contrôle très précis sur l’affichage : création de dessins,
positionnement précis de tous les éléments graphiques …. Cependant, cette précision sur l’affichage se fait au
détriment de la portabilité, tous les périphériques MIDP 2.0 ne seront pas capables de bien interpréter ces
programmes.
BTS iris - Lycée Eiffel - Armentières
Page 4 sur 13
09/02/2007
Présentation Java ME
3.2. Hiérarchie des classes graphiques MIDP 2.0
Command
0..n
Displayable
1
(from lcdui)
(from lcdui)
CommandListener
(from lcdui)
Screen
Canvas
(from lcdui)
(from lcdui)
List
TextBox
Alert
Form
(from lcdui)
(from lcdui)
(from lcdui)
(from lcdui)
Item StateListener
1
0..n
Item
(from lcdui)
Choice
Item CommandListener
(from lcdui)
(from lcdui)
ChoiceGroup
TextField
StringItem
Gauge
(from lcdui)
(from lcdui)
(from lcdui)
(from lcdui)
Im ageItem
DateField
CustomItem
Spacer
(from lcdui)
(from lcdui)
(from lcdui)
(from lcdui)
BTS iris - Lycée Eiffel - Armentières
Page 5 sur 13
09/02/2007
Présentation Java ME
3.3. Description des composants graphiques de haut niveau
3.3.1.1.
Les écrans « Alert »
Les écrans « Alert » sont employés pour afficher des messages informationnels ou d'erreur. Ces
messages restent sur l'écran pendant un court moment et disparaissent. Le type d’alerte (AlertType)
indique la nature de l’alerte et joue un son approprié.
3.3.1.2.
Les écrans « List »
Les écrans « List » sont employés pour afficher une liste d’éléments à sélectionner. Il existe 3 types de
List :
¾ On ne peut sélectionner qu’un élément (EXCLUSIVE)
¾
On peut sélectionner plusieurs éléments (MULTIPLE)
¾
L’élément en surbrillance est sélectionné (IMPLICIT)
3.3.1.3.
Les écrans « TextBox »
Les écrans « TextBox » sont employés pour permettre à l’utilisateur de saisir du texte. Les TextBox
permettent de restreindre le type de saisie : du texte, que des chiffres, une adresse e-mail, une URL,
etc.
BTS iris - Lycée Eiffel - Armentières
Page 6 sur 13
09/02/2007
Présentation Java ME
3.3.1.4.
Les écrans « Form »
Les écrans « Form » permettent de construire les IHM. Les Forms sont les seuls composants MIDP
qui peuvent contenir d’autres éléments graphiques (Items). Les IHM MIDP ne permettent pas
beaucoup de choix quand au placement des éléments graphiques, on ne peut contrôler que l’ordre
d’apparition de l’élément.
3.3.1.5.
Les éléments “ChoiceGroup”
Les éléments “ChoiceGroup” doivent être utilisés dans une Form.
Ils ont le même rôle que les écrans « List », ils permettent de proposer un choix à l’utilisateur et de
récupérer sa sélection.
BTS iris - Lycée Eiffel - Armentières
Page 7 sur 13
09/02/2007
Présentation Java ME
3.3.1.6.
Les éléments “DateField”
Les éléments “DateField” doivent être utilisés dans une Form.
Ils permettent à l’utilisateur de saisir une date, une heure ou les deux.
3.3.1.7.
Les éléments “Gauge”
Les éléments “Gauge” doivent être utilisés dans une Form.
Ils permettent de simuler une barre de défilement. Les Gauges peuvent aussi être interactives, par
exemple en permettant de contrôler le volume sonore.
3.3.1.8.
Les éléments “ImageItem”
Les éléments “ImageItem” doivent être utilisés dans une Form.
Ils permettent d’afficher une image. Suivant les implémentations de MIDP, seul le format PNG peut
être supporté.
3.3.1.9.
Les éléments “StringItem”
Les éléments “StringItem” doivent être utilisés dans une Form.
Ils permettent d’afficher un label, non modifiable par l’utilisateur. Un StringItem peut comporter un titre
et du texte.
3.3.1.10. Les éléments “TextField”
Les éléments “TextField” doivent être utilisés dans une Form.
Ils ont le même rôle que les écrans « TextBox ». Ils permettent d’afficher un champ de saisie.
3.3.1.11. Les éléments “Ticker”
Les éléments “Ticker” peuvent être attachés à n’importe quel élément dérivant de Displayable.
Les Tickers permettent d’afficher un texte défilant en haut de l’écran.
3.3.1.12. Les éléments “Spacer”
Les éléments “Spacer” doivent être utilisés dans une Form.
Ils permettent de positionner les éléments sur la Form en créant de l’espace entre eux. Ce sont des
éléments invisibles dont on peut contrôler la taille.
BTS iris - Lycée Eiffel - Armentières
Page 8 sur 13
09/02/2007
Présentation Java ME
3.3.1.13. Les éléments “CustomItem”
Les éléments “CustomItem” doivent être utilisés dans une Form.
CustomItem est une classe abstraite qui permet de créer des classes (éléments graphiques) ayant leur
propre apparence, leurs propres intéractions avec l’utilisateur et leurs propres mécanismes de
notification.
La création d’un CustomItem s’apparente beaucoup aux méthodes utilisées pour créer un composant
graphique de bas niveau (dérivant de Canvas), mais avec la particularité de pouvoir être utilisé comme
élément d’une Form.
4. Les applications Java ME
4.1. Présentation des MIDlets
Les applications J2ME sont appelées des MIDlets. En fait, c’est la classe abstraite MIDlet qui est dérivée pour
exécuter le cycle de vie du programme. Cette classe définit notamment 3 méthodes abstraites :
¾ startApp()
¾ pauseApp()
¾ destroyApp(boolean unconditional)
4.2. Fichiers JAD et JAR
Les applications J2ME se présentent sous la forme de deux fichiers. En complément du fichier JAR (Java
ARchive) contenant l’application, on fournit un fichier JAD (Java Archive Descriptor) qui contient des
informations sur l’application (auteur, version, taille, prix, URL de téléchargement). Cette organisation est
nécessaire quand on veut distribuer une application pour les téléphones portables (téléchargement OTA :
« Over The Air »).
5. Exemple de MIDlet simple : HelloWorld.
5.1. Code source et exécution
La structure du code d'un MIDlet est similaire à celle d'une applet : il n'y a pas de méthode main() et les
MIDlets étendent toujours la classe MIDlet. Les composants de l'interface utilisateur se trouvent dans le
package javax.microedition.lcdui.
Voici le listing de notre MIDlet HelloWorld :
001: import javax.microedition.midlet.*;
002: import javax.microedition.lcdui.*;
003:
004: public class HelloWorld extends MIDlet implements CommandListener {
005: private Command objCmdExit;
006: private Display objDisplay;
007: private TextBox objTextBox = null;
008:
009: public HelloWorld () {
010:
objDisplay = Display.getDisplay (this);
011:
objCmdExit = new Command ("Sortie", Command.EXIT, 2);
012:
objTextBox = new TextBox ("HelloWorld", "Bonjour le monde", 256, 0);
013:
objTextBox.addCommand (objCmdExit);
014:
objTextBox.setCommandListener (this);
015: }
016:
BTS iris - Lycée Eiffel - Armentières
Page 9 sur 13
09/02/2007
Présentation Java ME
017: public void startApp() {
018:
objDisplay.setCurrent (objTextBox);
019: }
020:
021: public void pauseApp() {
022: }
023:
024: public void destroyApp (boolean unconditional) {
025: }
026:
027: public void commandAction (Command prmCommand, Displayable prmDisplayable) {
028:
if (prmCommand == objCmdExit) {
029:
destroyApp (true);
030:
notifyDestroyed ();
031:
}
032: }
033: }
Résultat de l'exécution du code de ce MIDlet sur le simulateur de portable générique, fourni avec SUN Wireless
Toolkit.
Titre du Textbox
Texte du Textbox
Textbox
Zone d’affichage des commandes
placées juste au dessus du bouton
correspondant : ici le bouton objCmdExit
Remarque : le listener d’évènements
intercepte les actions venant des
commandes matérielles de l’appareil sur
lequel tournera cette application.
BTS iris - Lycée Eiffel - Armentières
Page 10 sur 13
09/02/2007
BTS iris - Lycée Eiffel - Armentières
Page 11 sur 13
CommandListener
listener
(f rom lcdui)
Command
commands[]
(f rom lcdui)
TextBox
-objTextBox
Command(arg0 : String, arg1 : int, arg2 : int)
-objCmdExit
(f rom lcdui)
Displayab le
-current
(f rom lcdui)
Screen
addCommand(arg0 : Command) : v oid
setCommandListener(arg0 : CommandListener) : v oid
currentDisplay
getDisplay (arg0 : MIDlet) : Display
setCurrent(arg0 : Display able) : v oid
-objDisplay
(f rom lcdui)
Display
(f rom lcdui)
commandAction(arg0 : Command, arg1 : Display able) : v oid
-midlet
TextBox(arg0 : String, arg1 : String, arg2 : int, arg3 : int)
MIDlet()
destroy App(arg0 : boolean) : v oid
pauseApp() : v oid
startApp() : v oid
notif y Destroy ed() : v oid
HelloWorld()
startApp() : v oid
pauseApp() : v oid
destroy App(arg0 : boolean) : v oid
commandAction(arg0 : Command, arg1 : Display able) : v oid
HelloWorld
MIDlet
(f rom midlet)
Présentation Java ME
5.2. Définition de la classe HelloWorld
09/02/2007
Présentation Java ME
La classe HelloWorld étend la classe MIDlet et implémente l'interface CommandListener (ligne 4).
En étendant la classe MIDlet, le programme peut exécuter un cycle de vie complet en implémentant son code
dans les trois fonctions startApp(), pauseApp() et destroyApp().
En implémentant l'interface CommandListener, notre programme peut intégrer un listener d'actions associé à
des événements de commande du matériel.
5.3. Les attributs de la classe
Nous utilisons trois objets :
¾ Command objCmdExit pour conserver l'état de la commande,
¾ Display objDisplay pour gérer l'affichage,
¾ TextBox objTextbox pour gérer la fenêtre de texte.
Ils sont initialisés dans le constructeur (lignes 5 à 7).
Remarque : l’objet de la classe TextBox est en fait une fenêtre ne contenant que du texte. TextBox est une
sous-classe de Screen et peut donc être placée directement sur le Display sans utiliser d’objet Form.
La classe Command permet de définir une commande utilisateur standard des applications J2ME. Elle
possède trois propriétés : le libellé, le type de commande (exemple : retour, annulation, validation, sortie,
aide, …) et le niveau de priorité (qui définit son emplacement et son niveau dans l'arborescence des menus).
5.4. Le constructeur
Le constructeur effectue une succession d'actions.
Ligne 10 : La première est de récupérer l'objet Display associé à cette instante de la classe HelloWorld. L'objet
objDisplay correspond au gestionnaire de l'affichage du terminal. Il comprend des méthodes de récupération
des propriétés du terminal et d'affichage d'objets sur le terminal.
Ligne 11 : Puis il crée une commande de type EXIT avec une priorité de niveau 2. C’est le bouton « Sortie »
qui permettra de quitter le programme.
Ligne 12 : Ensuite, il crée et initialise le seul composant de l'interface utilisateur du MIDlet, à savoir une zone
de saisie (objTextBox) ayant pour titre « HelloWorld » et pour texte « Bonjour le monde ». La longueur
maximale de saisie est de 256 caractères et aucune contrainte de saisie n'est spécifiée (d'où la valeur 0). Ce
composant permet la saisie au clavier. Les éventuelles contraintes de saisie restreignent les caractères qui
peuvent être entrés (alphabétique, numérique, …).
Ligne 13 : La commande de sortie est associée à la zone de saisie parce que c’est une application minimaliste
sans aucun autre composant sur l’interface utilisateur.
Ligne 14 : Le listener d’évènements du MIDlet est mis en place sur le seul composant de l’IHM objTextBox
(Rem : si on utilise une fiche Form, le listener peut être associé à la Form). Ainsi, la méthode
HelloWorld.commandAction() sera appelée dès qu'une commande sur la zone d’affichage génère un
événement.
Ligne 18 : Après l'appel du constructeur, la méthode startApp() est appelée. Dans notre exemple, le
composant objTextBox est passé à l'objet objDisplay pour le rendre visible sur l'affichage du terminal. Tout
MIDlet a un et un seul objet Display.
5.5. Les méthodes du cycle de vie
Lignes 17 à 19 : Le gestionnaire d'application appelle les méthodes associées aux différentes étapes de son
cycle de vie. Il appelle en tout premier la méthode startApp() pour lancer le MIDlet. Dans notre cas, elle rend
le Display courant.
Lignes 21 et 22 : La seconde étape du cycle de vie est la suspension du MIDlet. Cela est fait en appelant la
méthode pauseApp().Cette méthode doit libérer les ressources partagées comme les threads ou les
connexions. Dans notre exemple, nous ne faisons rien.
BTS iris - Lycée Eiffel - Armentières
Page 12 sur 13
09/02/2007
Présentation Java ME
Lignes 24 et 25 : La troisième et dernière étape consiste à terminer et détruire le MIDlet. Pour cela, le
gestionnaire d'applications appelle la méthode destroyApp(). Cette méthode libère toutes les ressources et
sauvegarde toutes les données persistantes. Nous n'utilisons aucune ressource et aucune donnée persistante,
la méthode est donc vide.
5.6. La gestion des événements
Ligne 27 : Les événements sont gérés par la méthode commandAction(). Elle reçoit en paramètre un objet
événement prmCommand qui permet d'identifier la provenance de l'événement survenu.
Ligne 28 : Ensuite, elle détermine l’origine de l’évènement (le composant dans lequel est survenu cet
événement).
Lignes 29 et 30 : Si c'est bien la commande Sortie qui a été activée, alors on détruit l'application (ligne 29) puis
on notifie au gestionnaire d'application que le MIDlet est détruit.
5.7. Remarques
L'interface utilisateur
L'interface utilisateur est basée sur un composant TextBox, similaire aux composants TextArea et TextField de
l'AWT (Abstract Window Toolkit). Il faut savoir que l'interface utilisateur d'un MIDlet est adaptée aux
caractéristiques des terminaux mobiles légers.
Le composant TextBox
Notre interface utilisateur, en dehors d'une commande, ne comprend qu'un seul composant, un TextBox. Ce
dernier possède trois propriétés : un libellé, un contenu initial (c'est la valeur par défaut) et un type. Pour utiliser
cet objet, il vous suffit lors de la création du composant de spécifier le libellé et le contenu initial. Ensuite, vous
ajoutez les commandes à la zone de saisie et demandez au MIDlet d'écouter les événements d'action en
appelant les méthodes objTextBox.setCommand() et objTextBox.setCommandListener().
Dans notre exemple, le texte « HelloWorld » apparaît dans la zone du titre et le texte « Bonjour le monde »
apparaît dans la zone du contenu initial. La commande Sortie apparaît dans la zone de commande et est
associée à la touche juste en dessous (sur un téléphone portable).
L'association des commandes aux touches
L'association des touches aux commandes est dépendante du périphérique. La classe MIDP Command vous
permet de spécifier les types de commande : BACK, CANCEL, EXIT, HELP, ITEM, OK, SCREEN et STOP.
Dans notre exemple, la pression du bouton (juste au dessous du texte « Sortie ») appelle la méthode
commandAction() en lui passant une référence à la commande objCmdExit. La méthode destroyApp(true)
est appelée ensuite. Le MIDlet se termine alors et l'environnement retourne au gestionnaire d'applications.
La priorité
Si plusieurs commandes d'une même application ont un même type de commande, alors la valeur de priorité
fixée détermine la manière dont va se faire l'association des commandes aux touches. Plus la valeur de priorité
est grande, plus importante est la commande.
Concrètement, le terminal choisit l'emplacement d'une commande selon le type de commande de même type
par ordre de priorité. Cela peut signifier que la commande de plus haute priorité est placée de manière à ce
que l'utilisateur puisse la déclencher directement et que les commandes avec une priorité inférieure sont
placées dans un menu.
BTS iris - Lycée Eiffel - Armentières
Page 13 sur 13
09/02/2007