Corso Java ME Sviluppo di applicazioni per telefoni cellulari e computer palmari http://www.gerdavax.it/corsojavame Stefano Sanna Versione 1.0.1 7 Giugno 2006 [email protected] Corso Java ME – http://www.gerdavax.it/corsojavame 1 Licenza Copyright e marchi citati Corso Java ME – http://www.gerdavax.it/corsojavame 2 Licenza ● Il materiale prodotto per questo corso (slide, codice sorgente, immagini originali) è stato rilasciata sotto la licenza Creative Commons Attribuzione-NonCommerciale-StessaLicenza2.5 ● Per leggere una copia della licenza visita il sito web: – http://creativecommons.org/licenses/publicdomain/ o spedisci una lettera a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA Corso Java ME – http://www.gerdavax.it/corsojavame 3 Licenza... in pratica :-) ● ● E' consentito: – utilizzare le slide per autoistruzione – utilizzare le slide per corsi all'interno di scuole pubbliche o università – stampare le slide per uso personale – ridistribuire copia delle slide senza modifiche Non è consentito: – utilizzare le slide per tenere un corso a pagamento – utilizzare le slide per un qualsiasi scopo nascondendo le informazioni sull'autore – modificare il contenuto delle slide Corso Java ME – http://www.gerdavax.it/corsojavame 4 Limitazione di responsabilità Malgrado l'impegno e la buona volontà a fornire contenuti tecnicamente corretti, è possibile che ci siano errori. Per questo motivo e data la gratuità della licenza, il materiale è fornito “COSI' COM'E'”, “AS IS”, e non si fornisce alcuna garanzia sulle informazioni contenute in questa presentazione né ci si assume alcuna responsabilità da eventuali danni causati dall'uso proprio o improprio delle suddette. Corso Java ME – http://www.gerdavax.it/corsojavame 5 Marchi citati ● ● ● I marchi dei prodotti citati in questa presentazione sono di proprietà dei rispettivi titolari Java e tutti i marchi e simboli ad esso correlati sono di proprietà di Sun Microsystems L'autore non ha alcun legame con Sun Microsystems e con i produttori dei dispositivi e dei software citati in questa presentazione. Le considerazioni esposte hanno carattere di disquisizione tecnica e non esprimono giudizi positivi o negativi su nessun prodotto Corso Java ME – http://www.gerdavax.it/corsojavame 6 Java ME La piattaforma per dispositivi mobili Corso Java ME – http://www.gerdavax.it/corsojavame 7 Java ME ● ● ● ● “Java Platform, Micro Edition”, “Java ME”, “JME” sono i nomi che identificano la specializzazione delle tecnologie legate al linguaggio Java per il mercato dei dispositivi mobili ed embedded Java ME è un insieme di specifiche (Java Specification Request, JSR) rilasciate dal Java Community Process, JCP E' una tecnologia matura, supportata dai maggiori player del mercato della telefonia mobile e coinvolge milioni di sviluppatori Il mercato delle applicazioni per dispositivi mobili è in continua crescita: prima giochi, oggi musica, video, instant messaging, Location-Based Services Corso Java ME – http://www.gerdavax.it/corsojavame 8 Dove è disponibile Java ME ● Prima di affrontare lo sviluppo su Java ME è importante capire su quali sistemi è attualmente disponibile: – – Piattaforme stabili e ben supportate: ● Sistemi operativi proprietari ● Symbian OS ● Windows Mobile ● Savaje (in crescita) ● PalmOS Piattaforme... da tenere d'occhio: ● ● Maemo (in attesa che ci sia un buon runtime) Nuovo PalmOS (in attesa che ci sia chiarezza sul sistema operativo e sugli ambienti di sviluppo supportati) Corso Java ME – http://www.gerdavax.it/corsojavame 9 Java ME qualche anno fa... Fonte: Sun Microsystems Corso Java ME – http://www.gerdavax.it/corsojavame 10 Java ME da oggi in poi... Fonte: Sun Microsystems Corso Java ME – http://www.gerdavax.it/corsojavame 11 Virtual Machine, Configurazioni, Profili ● Virtual Machine – ● Configurazione – ● E' il motore Java che fornisce la prima astrazione rispetto all'hardware del dispositivo: è parte integrante della distribuzione del sistema operativo, lo sviluppatore non interagisce con essa E' il set funzionalità e di classi comune ad una famiglia di dispositivi caratterizzati da potenza hardware simile. E' l'interfaccia verso la virtual machine. Non definisce una GUI! Profilo – E' la specializzazione della Configurazione su una tipologia di prodotto. Definisce il modello delle applicazioni, la GUI (se esiste...), la persistenza... Corso Java ME – http://www.gerdavax.it/corsojavame 12 Configurazioni e Profili ● ● ● Con buona approssimazione, lo sviluppatore può considerare Virtual Machine e Configurazione come un tutt'uno: rappresentano il livello più basso di astrazione dell'hardware, del quale rispecchiano le caratteristiche La Configurazione non rappresenta un dispositivo preciso ma l'hardware di base con cui si costruiscono famiglie di dispositivi Il Profilo rappresenta la differenziazione di una base hardware su prodotti specifici: esso “decide” se una board (opportunamente completata) diventerà un cellulare, oppure un navigatore per auto o un totem informativo dell'aeroporto Corso Java ME – http://www.gerdavax.it/corsojavame 13 Configurazioni ● ● CDC: Connected Device Configuration – Equipaggia: palmari, set-top box, navigatori – Profili: ● Foundation Profile ● Personal Basis Profile ● Personal Profile CLDC: Connected, Limited Device Configuration – Equipaggia cellulari, pager, palmari – Profili: ● Mobile Information Device Profile (MIDP) ● Information Module Profile (IMP) Corso Java ME – http://www.gerdavax.it/corsojavame 14 CDC, FP, PBP, PP: la squadra! ● ● Rispetto al mondo CLDC (una configurazione, un profilo), CDC e i relativi profili costituiscono un ecosistema complesso e modulare: CDC: – ● FP: – ● Foundation Profile PBP: – ● Connected Device Configuration Personal Basis Profile PP: – Personal Profile Personal Basis Profile Foundation Profile Personal Profile Corso Java ME – http://www.gerdavax.it/corsojavame CDC 15 Chi fa cosa: CDC e FP ● CDC (JSR 36): – ● Fornisce una VM compatibile J2SE, con un subset della libreria standard (1.3 per CDC 1.0, 1.4 per CDC 1.1): ● java.lang, java.lang.ref, java.lang.reflect, java.math ● java.io, java.net, javax.microedition.io ● java.security, java.security.cert ● java.text, java.util, java.util.jar, java.util.zip Foundation Profile (JSR 46): – Completa i package forniti da CDC, per avere piena copertura della libreria standard 1.3.1 Corso Java ME – http://www.gerdavax.it/corsojavame 16 Chi fa cosa: PBP e PP ● Personal Basis Profile (JSR 129): – ● Aggiunge il supporto base AWT per componenti lightweight e introduce il modello di applicazioni basato su Xlet: ● java.awt, java.awt.event, java.awt.color, java.awt.image ● java.beans, java.rmi, java.rmi.registry (per Xlet) ● javax.microedition.xlet, javax.microedition.xlet.ixc Personal Profile (JSR 62): – Completa il supporto AWT con i componenti nativi: ● java.applet, java.awt.datatransfer Corso Java ME – http://www.gerdavax.it/corsojavame 17 CDC e PP: vantaggi in breve ● ● ● ● ● Standard library molto più ricca rispetto a CLDC/MIDP, sottoinsieme della Standard Edition 1.4 (CDC 1.1) Sfruttano le prestazioni dei palmari e degli smartphone di fascia alta Supporto JNI: ciò che il runtime Java non offre può essere sviluppato ad hoc se necessario (ad esempio, interazione con la taskbar) Possibilità di usare componenti nativi e di utilizzare altre librerie grafiche (HAVi, DVB...) Rivisitazione in chiave “JME” dell'esperienza maturata su Personal Java Corso Java ME – http://www.gerdavax.it/corsojavame 18 Tre modelli applicativi ● Il top della gamma Java ME lascia ampia libertà allo sviluppatore, che può scegliere il modello applicativo più opportuno: – Stand-alone: l'applicazione è indipendente dal ambiente di esecuzione: il metodo main() costituisce l'entry point, non vi è altra interazione con il sistema operativo – Managed: l'applicazione (Xlet) è gestita da un XletManager, che le assegna un Context con il quale interagisce. Attivazione, sospensione e disattivazione passano per il Manager – Embedded: Applet eseguite all'interno dell'AppletViewer o di un browser web Corso Java ME – http://www.gerdavax.it/corsojavame 19 CDC: API opzionali ● ● Sono attualmente definite alcune API per CDC: – J2ME RMI Optional Package, (RMI OP); JSR 66 – JDBC Optional Package for CDC/Foundation Profile API; JSR 169 – Java TV API; JSR 927 – Java Secure Socket Extension for CDC (JSSE) – Advanced Graphics and UI (fornirà supporto a Swing, Java 2D, Image I/O, Input Method Framework APIs for more capable mobile devices); JSR 209 Per maggiori informazioni: – http://java.sun.com/j2me/ Corso Java ME – http://www.gerdavax.it/corsojavame 20 CLDC ● ● ● ● E' configurazione low-end della piattaforma Java ME progettata per il mercato consumer Hardware di riferimento: – CPU a 16 e 32 bit – memoria minima 192KByte – componentistica a basso consumo; alimentazione a batterie – connettività discontinua a banda stretta Rientrano in questa categoria PDA, cellulari, pager, POS, vending-machine, tv-box portatili CLDC non definisce un modello applicativo, non fornisce componenti per l'interfaccia grafica, né specifica le funzionalità di networking Corso Java ME – http://www.gerdavax.it/corsojavame 21 CLDC: principali caratteristiche ● ● CLDC impone notevoli limitazioni rispetto alla piattaforma standard: – class library limitata – nessuna reflection, niente serializzazione – nessun supporto JNI, niente classloader multipli – modello di threading semplificato – utility set ridotto (manca la Collection API) – I/O elementare – clamorose assenze: BufferedReader, StringTokenizer... Mancano tutti gli enhancement di Java 5.0 :-( Corso Java ME – http://www.gerdavax.it/corsojavame 22 CLDC 1.0 e CLDC 1.1 ● La versione 1.1 introduce alcune importanti migliorie, che tengono conto dell'incremento di prestazioni dell'hardware entry-level e delle richieste provenienti dai produttori dei dispositivi e degli sviluppatori: – supporto aritmetica floating point (float, double e relative classi wrapper più tutte le modifiche necessarie alla standard library) – piccoli aggiustamenti sulla libreria standard (String, Thread...) per avere qualche funzionalità in più e una maggiore aderenza alla piattaforma standard Corso Java ME – http://www.gerdavax.it/corsojavame 23 Mobile Information Device Profile ● ● E' la specializzazione di CLDC per telefoni cellulari, pager, palmari low-end E' il profilo telefonico per eccellenza: – Definisce un set minimo ma funzionale per la creazione di interfacce grafiche per display mouse-less & pen- less – Offre connettività wireless e un servizio base di persistenza locale – E' sufficientemente leggero e astratto da poter essere portato su una grande varietà di dispositivi e di piattaforme – E' continuamente aggiornato e arricchito da librerie opzionali Corso Java ME – http://www.gerdavax.it/corsojavame 24 MIDP 1.0 ● Specifica rilasciata a settembre 2001 ● Funzionalità: ● – Interfacce grafiche elementari – Connessioni HTTP – Persistenza dei dati sul dispositivo Principali limiti: – Nessuna funzione multimediale – Nessun supporto a connessioni sicure – Mancanza di componenti personalizzabili Corso Java ME – http://www.gerdavax.it/corsojavame Nokia 7650, uno dei cellulari MIDP sul mercato italiano 25 MIDP 2.0 ● Rilasciata a fine 2002 ● Miglioramenti: – Possibilità di definire componenti grafici personalizzati – Maggior numero di protocolli di rete supportati (compreso https) – Funzionalità di base per gestione file audio – API avanzate per lo sviluppo di videogiochi – Push Registry – Nuovo modello di sicurezza Nokia 6600, uno dei primi cellulari MIDP 2.0, con estensioni multimediali e supporto Bluetooth Corso Java ME – http://www.gerdavax.it/corsojavame 26 MIDP 3.0 ● ● Il Java Community Process ha iniziato a lavorare al JSR 271, nella cui agenda figurano: – Multitasking e background MIDlets – Potenziamento GUI e uso del secondo display – Internazionalizzazione più potente – Supporto per diversi tipi di reti (Wi-Fi, telefonica...) – Standardizzazione delle interfacce per l'installazione delle applicazioni Early Draft Specification attesa per metà giugno 2006...! :-) Corso Java ME – http://www.gerdavax.it/corsojavame 27 Information Module Profile ● ● ● E' il profilo basato su CLDC e specializzato per il M2M (Machine-To-Machine) Eredita la maggior parte dei concetti di MIDP, ad esclusione della interfaccia grafica (in alcuni moduli aggiunge il supporto a ingressi e uscite analogiche e digitali Siemens TC65 Le applicazioni per questo profilo (JSR 195) sono dette IMlet e sono pensate per l'esecuzione in moduli embedded per sistemi di telecontrollo Nokia MP12 Corso Java ME – http://www.gerdavax.it/corsojavame 28 API opzionali ● ● CLDC e MIDP permettono di costruire applicazioni “elementari”. La vera ricchezza è nelle API opzionali: – Wireless Messaging API (JSR 120 & 205) – Mobile Media API (JSR 135) – Mobile 3D Graphics (JSR 184) – Bluetooth API (JSR 82) – FileConnection & PIM API (JSR 75) – Web Services API (JSR 172) – Location API (JSR 179) Queste sono le API più comuni... Corso Java ME – http://www.gerdavax.it/corsojavame 29 Nuove API opzionali ● Sono in fase di imminente rilascio dispositivi con runtime che supportano le ultime API: – Security and Trust Services API (JSR 177) – Advanced Graphics and User Interface Optional Package (JSR 209, per CDC) – Content Handler API (JSR 211) – SIP API (JSR 180) – Scalable 2D Vector Graphics API (JSR 226) – Advanced Multimedia Supplements (JSR 234) – Mobile Telephony API (JSR 23) – Mobile Sensor API (JSR 256) – Unified Message Box Access API (JSR 266)... Corso Java ME – http://www.gerdavax.it/corsojavame 30 Device fragmentation ● ● ● L'offerta dei dispositivi mobili è estremamente variegata, in termini funzionalità e prezzo Prodotti apparentemente simili (ad esempio, due telefoni cellulari...) possono avere caratteristiche hardware e software assolutamente incomparabili tra loro: si può passare da pochi MB di memoria e display 96x96 a centinaia di MB e risoluzioni VGA L'architettura fortemente modulare di Java ME lascia ampia libertà ai produttori di dispositivi di diversificare al massimo l'offerta di prodotti Corso Java ME – http://www.gerdavax.it/corsojavame 31 Device fragmentation ● ● Il numero delle possibili combinazioni di funzionalità su un terminale aumenta per il fatto che ciascuna specifica definisce, a sua volta, caratteristiche opzionali Problemi: – data una qualsiasi applicazione non banale, è estremamente difficile riuscire a scrivere codice che funzioni perfettamente su ogni terminale – sfruttare le caratteristiche di un dispositivo penalizza fortemente la portabilità – dato il dispositivo X è difficile, senza documentazione opportuna, stabilirne le caratteristiche Corso Java ME – http://www.gerdavax.it/corsojavame 32 Java Technology for Wireless Industry ● ● Al fine di offrire una maggiore standardizzazione dei dispositivi e armonizzare la scelta delle funzionalità opzionali, il JCP ha rilasciato la JSR 185, denominata “Java Technology for Wireless Industry” La specifica ha come obiettivi: – chiarire le ambiguità e le incomprensioni derivanti dalle specifiche CLDC e MIDP – definire un set minimo di funzionalità che tutti i dispositivi JTWI-compliant devono avere – definisce alcune feature opzionali dei componenti (si veda il comportamento dei TextField) Corso Java ME – http://www.gerdavax.it/corsojavame 33 Mobile Service Architecture ● JTWI non è più sufficiente per “dominare” la complessità di Java ME: nasce la Mobile Service Architecture, una iniziativa che mira ad offrire maggiore portabilità cross-vendor: Fonte: Sun Microsystems Corso Java ME – http://www.gerdavax.it/corsojavame 34 MSA per CLDC ● Questi i device CLDC MSA-compliant del prossimo futuro: Fonte: Sun Microsystems Corso Java ME – http://www.gerdavax.it/corsojavame 35 I riferimenti principali ● Sun Microsystems: – ● ● http://java.sun.com/j2me Java Community Process: – http://jcp.org/ – http://jcp.org/en/jsr/tech?listBy=1&listByType=platf orm Community italiane: – Java Mobile Developers Forum, JMDF: http://jmdf.java2me.org – JUG Sardegna: http://www.jugsardegna.org – JIA, Java Italian Association: http://www.jia.it Corso Java ME – http://www.gerdavax.it/corsojavame 36 Java ME Strumenti di sviluppo Corso Java ME – http://www.gerdavax.it/corsojavame 37 Strumenti di sviluppo ● ● Java ME è una tecnologia matura, per la quale esiste una grande varietà di strumenti gratuiti (open source e proprietari), tool commerciali, utility, librerie e una ricca documentazione In questo corso saranno presentati, fintanto che sarà possibile, solo strumenti gratuiti e open source. Saranno opportunamente segnalate alternative commerciali Corso Java ME – http://www.gerdavax.it/corsojavame 38 Strumenti di sviluppo ● ● ● Ambienti di sviluppo – Sun Wireless Toolkit – Netbeans + Mobility Pack – Eclipse + EclipseME Strumenti dei vendor di dispositivi – Nokia Carbide.j + Java ME SDKs – Sony-Ericsson SDK – Motorola SDK Strumenti di testing – J2MEUnit – Gatling (Motorola) Corso Java ME – http://www.gerdavax.it/corsojavame 39 Riferimenti ● Strumenti di sviluppo gratuiti (per alcuni è necessaria la registrazione sul sito): – Netbeans: http://www.netbeans.org – EclipseME: http://eclipseme.org/ – Nokia: http://www.forum.nokia.com – Sony-Ericsson: http://developer.sonyericsson.com – Motorola: http://developer.motorola.com – BenQ: http://www.benqmobile.com/developer – Samsung: http://developer.samsungmobile.com Corso Java ME – http://www.gerdavax.it/corsojavame 40 Java Wireless Toolkit ● ● ● E' lo strumento fondamentale per il processo di sviluppo per CLDC/MIDP Fornisce funzionalità elementari per la gestione dei progetti e un piccolo set di emulatori astratti E' estendibile, personalizzabile, integrato con la maggior parte degli IDE Corso Java ME – http://www.gerdavax.it/corsojavame 41 Java Wireless Toolkit 2.2 ● La stable version attuale è la 2.2 e supporta: – CLDC 1.1 (JSR 139) – MIDP 2.0 (JSR 118) – JTWI 1.0 (JSR 185) – Wireless Messaging API 2.0 (JSR 205) – Mobile Media API 1.1 (JSR 135) – PDA & PIM API (JSR 75) – Java APIs for Bluetooth (JSR 82) – Web Services API (JSR 172) – Mobile 3D Graphics API (JSR 184) Corso Java ME – http://www.gerdavax.it/corsojavame 42 Java Wireless Toolkit: preferenze ● Il Java Wireless Toolkit dispone di una ricco set di funzionalità e configurazioni che permettono di impostare i parametri più importanti di emulazione: – Environment: velocità di esecuzione virtual machine, latenza del sottosistema grafico, dimensione heap e storage area, security – Networking: proxy, limitazione sulla banda disponibile – Monitor: network monitor, memory monitor, profiler – Strumenti di emulazione per messaggistica SMS e connessioni Bluetooth Corso Java ME – http://www.gerdavax.it/corsojavame 43 Java Wireless Toolkit: network Corso Java ME – http://www.gerdavax.it/corsojavame 44 Java Wireless Toolkit: performance Corso Java ME – http://www.gerdavax.it/corsojavame 45 Java Wireless Toolkit: monitor Corso Java ME – http://www.gerdavax.it/corsojavame 46 Java Wireless Toolkit: storage Corso Java ME – http://www.gerdavax.it/corsojavame 47 Java Wireless Toolkit: WMA Corso Java ME – http://www.gerdavax.it/corsojavame 48 Java Wireless Toolkit: security Corso Java ME – http://www.gerdavax.it/corsojavame 49 Java Wireless Toolkit: Bluetooth Corso Java ME – http://www.gerdavax.it/corsojavame 50 Profiler e Memory Monitor Il Garbage Collector è entrato in azione!!! Corso Java ME – http://www.gerdavax.it/corsojavame 51 Java Wireless Toolkit 2.3 (beta) ● ● La nuova versione del Wireless Toolkit, attualmente in beta, è totalmente aderente alla specifica JTWI e aggiunge supporto per: – Security and Trust Services API (JSR 177) – Location API (JSR 179) – Content Handler API (JSR 211) Per adesso esiste solo la versione Windows... Corso Java ME – http://www.gerdavax.it/corsojavame 52 Netbeans + Mobility Pack ● ● ● Netbeans 5.0, insieme al Mobility Pack (per MIDP) e al CDC Mobility Pack è lo strumento più completo e efficace per lo sviluppo di applicazioni per device mobili Offre supporto a: – Controllo completo su tutto il processo di sviluppo – Configurazioni multiple per diversi dispositivi – Localizzazione delle applicazioni – Integrazione con web services e web applications E' stato recentemente rilasciato il CDC Mobility Pack, che permette di sfruttare appieno le caratteristiche della configurazione superiore Corso Java ME – http://www.gerdavax.it/corsojavame 53 Non solo Windows... ● ● Microsoft Windows è l'ambiente di sviluppo d'eccellenza per JME – Tutti i tool di sviluppo e gli SDK dei produttori di dispositivi sono rilasciati per Windows! – Le utility per la connettività e per l'ODD (OnDevice-Debugging) sono Per Linux e Mac OS X esistono soluzioni robuste e “di salvataggio”, talvolta prodotte dalle community. Forte (e incomprensibile!) la totale assenza dei produttori dei dispositivi, che sembrano del tutto indifferenti ai due sistemi operativi: non esistono nemmeno le suite per la sincronizzazione dei dati utente!!! Corso Java ME – http://www.gerdavax.it/corsojavame 54 Sviluppo in ambiente Linux ● ● ● Java Wireless Toolkit, Netbeans e Mobility Pack sono disponibili per Linux!!! :-) Purtroppo mancano gli emulatori e altre utility dei produttori dei dispositivi... – La Nokia J2ME Devloper's Suite era supportata sino alla versione 2.2 – La comunità degli sviluppatori IBM distribuisce la versione per Linux del WebSphere Device Developer e relativi runtime Corso Java ME – http://www.gerdavax.it/corsojavame 55 Sviluppo in ambiente Mac OS X ● ● ● ● Mac OS X è l'ambiente più penalizzato: manca il Mobility Pack, non esiste alcun supporto dai produttori dei dispositivi. Inizialmente ci sono stati tentativi di porting del wireless toolkit e dei workaround per mpowerplayer è un emulatore e SDK che permette lo sviluppo e il test di applicazioni Java ME. Supporta: – MIDP 2.0 – Bluetooth API – Mobile 3D Graphics Info: http://www.mpowerplayer.com/ Corso Java ME – http://www.gerdavax.it/corsojavame 56 mpowerplayer Corso Java ME – http://www.gerdavax.it/corsojavame 57 Utility e accessori ● Lo sviluppo Java ME può essere semplificato utilizzando alcune utility e accessori: – Symbian: ● ● ● – ScreenShot: per catturare ciò che appare nel display del telefono File Explorer: per rimuovere eventuali file danneggiati GNUBox: per avere connettività IP sfruttando il PC (via Bluetooth) anziché la rete telefonica Windows Mobile: ● ● Remote Display: esporta in tempo reale il display del PDA sul PC ssMagic: per catturare l'immagine sullo schermo Corso Java ME – http://www.gerdavax.it/corsojavame 58 Uso di Netbeans ● DEMO Corso Java ME – http://www.gerdavax.it/corsojavame 59 Nuovo progetto (1) Corso Java ME – http://www.gerdavax.it/corsojavame 60 Nuovo progetto (2) Corso Java ME – http://www.gerdavax.it/corsojavame 61 Nuovo progetto (3) Corso Java ME – http://www.gerdavax.it/corsojavame 62 Nuovo progetto (4) Corso Java ME – http://www.gerdavax.it/corsojavame 63 Nuovo progetto (5) Corso Java ME – http://www.gerdavax.it/corsojavame 64 Nuovo progetto (6) Corso Java ME – http://www.gerdavax.it/corsojavame 65 Nuovo progetto (7) Corso Java ME – http://www.gerdavax.it/corsojavame 66 Corso Java ME http://www.gerdavax.it/corsojavame Corso Java ME – http://www.gerdavax.it/corsojavame 67