Documentazione Contatti      
Documentazione > Tutorial > MIDlet : un esempio pratico
Hide
Best Practices
EJB
Frameworks
Howto
J2EE
J2ME and Wireless
J2SE
JSP e Servlet
Java Application Server
Java IDE/Tools
Java Media
Java Security
Java Sys Admin
Java e XML
Java e SQL
OpenSource Java
Patterns
Repository
Tesi
UML
Web Services
Slide
White Paper di jws.it
project management
Eventi
Groovy



Java Application Server day 2009


John Fitzgerald Kennedy
L'uomo è il computer più straordinario di tutti


Convention over configuration



  Visualizza Commenti (0) Aggiungi Commento    
 
MIDlet : un esempio pratico
By Giuseppe Acito
17 settembre 2005

  MIDlet : un esempio pratico

La Sun Mycrosystems, con il rilascio della Java 2 Micro Edition entra ufficialmente nel mercato degli handheld, two pagers, palmari e cellulari, basando la suddetta piattaforma sulla specifica CLDC (Connected Limited Device Configuration ) che detta le basi per lo sviluppo su piattaforme a configurazione limitata. Le limitazioni di configurazione comprendono:

  • Memoria allocabile
  • Potenza di calcolo
  • Connessioni di rete con alti valori di latenza e bassa ampiezza di banda.

La specifica è caratterizzata da una natura di basso livello, con un set di API's limitato a fornire le funzionalità base per un qualunque device a limitata configurazione. Saranno poi i prodotturi di particolari categorie ad aggiungere funzionalità al CLDC, sotto forma di librerie, generando così quello che è un profilo. Il primo profilo proposto è il MIDP (Mobile Information Device Profile), che riguarda principalmente terminali wireless, in grado di instaurare connessione basata sull'arcinoto protocollo HTTP (da qui già si intende la proiezione che questa specifica ha su Internet). Il CLDC, e di conseguenza anche il MIDP sono bastia sulla KVM, prodotta dalla SUN: è una virtual machine pensata per dispositivi con un quantitativo di memoria misurabile nell'ordine del kilobyte (da qui la K iniziale) ed indirizzata a processori RISC/CISC da 16 o 32 bit con 160kb di RAM, 128 di cui utilizzate per la memorizzazione della VM e relative librerie.
La generica applicazione per una KVM aderente al profilo MIDP, è il MIDlet nome che segue il trend dei vari applet, servlet, ecc…Non a caso le MIDlet hanno molti punti in comune con gli applet, ed in alcuni casi sono anche più avanzati: il MIDlet è infatti un componente scaricabile in locale come un applet ed in base ad un descrittore di cui è corredato (il file .jad), il contenitore sa come gestire l'applicazione scaricata (che sarà sempre un file .jar).

 

Fig. 1 MIDlet : un esempio pratico

Per poter compilare e testare a mezzo di un emulatore occorre il , messo a disposizione dalla Sun, ma solo per sistemi Windows (98, NT4, 2000). L'installazione del J2ME Wireless toolkit non richiede nulla di particolare se non un JDK o un JRE 1.3 (o superiore) e la scelta di installare il toolkit integrandolo con Forte for Java, oppure in versione standalone, in questo caso dovremo provvedere da soli alla scelta dell'editor da utilizzare per scrivere il codice. Il Toolkit fornisce anche una basilare, ma sufficiente gestione di progetti, ordinandoli seguendo una precisa struttura a cartelle.

La scrittura di un MIDlet è abbastanza intuitiva per chi è già pratico di Java e grazie ad un oculato studio della documentazione, rigorosamente javadoc, si riesce da subito a realizzare qualcosa di funzionante. Bisogna però seguire delle regole rigide, né più né meno come si è soliti fare per le applet:

  1. la classe deve estendere la classe javax.microedition.midlet.MIDlet
  2. deve implementare i metodi startApp, pauseApp, destryApp (corrispondenti nella funzionalità ai metodi init, stop, destroy delle applet) che sono dichiarati abstract nella classe da cui si estende.

Leggendo la documentazione si nota che molte delle classi di largo uso (Vector, Stack…) della J2SE sono rimaste inalterate, con le dovute limitazioni del caso, ma bisogna dimenticarsi 3 funzionalità per ovvi motivi:

  1. numeri a virgola mobile, dato che non si può essere certi che un CLDC abbia hardware necessario
  2. JNI (Java Native Interface), per un eccessivo consumo di memoria…
  3. Introspezione, quindi serializzazione ed RMI non supportati.

Per poter scrivere sul display occorre fare uso delle funzionalità grafiche (che non sono direttamente derivate dalle AWT/Swing) molto semplici data la natura più limitata della GUI di un CLDC. E' stato deciso di seguire il paradigma di contenitori e componenti, come tutta la tecnologia Java: il principale contenitore è il Display Manager implementato dalla classe javax.microedition.lcdui.Display.Ad un Display è associato un oggetto Displayable. Quest'ultimo opportunamente esteso classifica due categorie, caratterizzate dalla gestione ad alto o a basso livello della grafica e degli eventi: lo Screen e sottoclassi per il primo caso, il Canvas nel secondo.

Noi faremo uso del Form, componente figlio di Screen che può contenere varie categorie di Items: dai campi di testo alle checkbox.
Ora si passa alla pratica: apriamo la Ktoolbar, base di partenza per tutte le Midlet che vogliamo creare.


Fig. 2 MIDlet : un esempio pratico

Clicchiamo su New Project e specifichiamo due informazioni: nome del progetto (che in verità è il nome della cartella dove viene collocato) e nome del Midlet iniziale (ma nessuno ci vieta di mettere più midlet all'interno dello stesso progetto!).

Apparirà poi una schermata dove ci vengono richieste quelle che sono me meta-informazioni sull JAR file da costruire: le ritroveremo poi nel descrittore e nel manifest file. Da notare l'ultimo tab, MIDlets: consente l'aggiunta di ulteriori midlet nello stesso Jar: sarà poi dal terminale che scegliamo quale eseguire in base ad una lista.

Fig. 3 MIDlet : un esempio pratico

Avendo installato con l'opzione standalone, quindi non utilizziamo Forte for Java per sviluppare, andiamo ad aprire la cartella HelloWorldProject (o il nome del vostro progetto), che si presenta con questa struttura:

  • HelloWorldProject
    • bin  
    • res
    • src

all'interno di bin dove non si trovano le classi compilate, come sarebbe intuibile, ma il file jar ed il relativo descrittore; res è una cartella generica di risorse (spesso immagini PNG) ed src è la nostra cartella di lavoro, o meglio la radice del classpath da cui verranno ricercate e compilate le classi dell'applicazione. Alla prima compilazione verrano create le cartelle classes, dove questa volta troviamo le singole classi compilate, ed una cartella temporanea.
Il descrittore viene utilizzato per eseguire dei controlli base da parte del software di gestione applicazioni del dispositivo portatile: controllo versioni, dimensioni del jar file, nome autore ecc…Nella forma e nei contenuti è molto simile al file di manifest che già si trova all'interno del jar file, ma ha un utilità non trascurabile: un server WEB, quando gli viene richiesta un url che corrisponde ad una midlet, settando come mime-type text/vnd.sun.j2me.app-descriptor, invia solo il descrittore. Questo verrà poi comparato lato client con l'eventuale manifest del jar file, se è già stato scaricato dalla rete(versionamento), oppure controlla se il jar file è fisicamente collocabile nella memoria.
La specifica della SUN prevede che qual'ora le informazioni dovessero essere discordi viene considerato sempre il descrittore. L'utilizzo di questo, che ha estensione JAD, non è obbligatorio ma è chiara la sua convenienza ed oltretutto viene creato automaticamente dal J2ME Wireless toolkit.
Quindi, sotto src con un editor a nostro piacimento creiamo il file HelloWorld.java, e scriviamo il codice, iniziando dagli import:

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

Il primo package è costituito soltanto dalla classe MIDlet (astratta), il secondo è il package base per la gestione del' interfaccia grafica, che vedremo in un altro articolo.
Dichiaro la classe con gli attributi…

public class HelloWorld extends MIDlet {

                Display display;

                Form form;

    .

    .

    .

}

l'attributo display, come detto, è l'astrazione del display del cellulare sul quale impostare qual'è il componente da visualizzare, nel nostro caso il form. Una volta dichiarati gli attributi, passiamo alla definizione dei metodi. Scelta obbligata ricade sui metodi startApp, pauseApp e destroyApp, ma nessuno ci vieta di aggiungerne altri, in fondo una Midlet è una classe Java che gira in una VM. Per le nostre esigenze è sufficiente implementare lo startApp, invocato una volta istanziato l'oggetto, dato che dovremo gestire un unico evento, quello del lancio dell'applicazione per visualizzare una scritta.

public void startApp() {

                display = Display.getDisplay(this);               //ottengo il display

                form = new Form("mio primo MIDlet");    // creo il contenitore

                StringItem sItem = new StringItem(null,"Hello World!");//creo il componente

                form.append(sItem);                               //aggiungo il componente al contenitore

                display.setCurrent(form);                         //imposto come displayable corrente

}

Il sorgente quindi dovrebbe apparire così:

import javax.microedition.lcdui.*;

import javax.microedition.midlet.*;

 

 

public class HelloWorld extends MIDlet {

            Display display;

            Form form;

           

            public void destroyApp(boolean unconditional) {

                        notifyDestroyed()

            }

 

            public void pauseApp() {

            }

           

            public void startApp() {

                        display = Display.getDisplay(this);

                        form = new Form("mio primo MIDlet");

                        StringItem sItem = new StringItem(null,"Hello World!");

                        form.append(sItem);

                        display.setCurrent(form);

            }

}

Il metodo notifyDestroyed() che invoco in destroyApp() è un metodo della superclasse MIDlet, che notifica lo stato Destroyed della MIDlet, quindi la KVM può deallocare tramite Garbage Collection le risorse utilizzate.
Torniamo sul Ktoolbar, clicchiamo su Build e dovrebbe dare come risultato la seguente schermata:


Fig. 4 MIDlet : un esempio pratico

Com'è intuibile, cliccando su Run si fa partire l'emulatore:

 

Fig. 5 MIDlet : un esempio pratico




JavaPortal è ideato da:    
K-Tech Logo










LICENZA



Eccetto dove diversamente specificato, i contenuti di questo sito sono rilasciati sotto licenza Creative Commons

Sitemap  © 2002-2004 Copyright Information. Privacy . Today is sabato 19 giugno 2010