Mi sono trovato nella necessità di scrivere un'applicazione che potesse girare sulla maggioranza dei telefoni cellulari. Quale miglior occasione quindi di approfondire la conoscenza di java, certo Java Micro Edition non è esattamente il massimo dei framework, le funzionalità sono molto limitate, ma è pur sempre java.
Il primo passo è stato di trovare un IDE con funzioni avanzate per la scrittura del codice. Googlando in giro ho trovato i soliti fun dell'uno o dell'altro ide, ma infine da quello che sono riuscito a capire, i migliori (almeno di quelli open source) dovrebbero essere 2: Eclipse e NetBeans. Per quanto riguarda eclipse, in passato ho già avuto una brutta esperienza, oltre ad essere pesantuccio non è esattamente intuitivo, di conseguenza la scelta è caduta su NetBeans (che dal nome sembrerebbe esse più un editor html).
NetBeans si è rivelato un buon IDE, molto completo, con esempi, gestione del codice, refactoring... ovviamente però siamo lontani da visual studio, in particolare l'ntellisense di NetBeans non compare mai quando ne hai bisogno, e per un linguaggio case sensitive come java è un fastidio non da poco, un altra pecca è il caricamento alle volte estenuante. Molto potente, invece, è la gestione delle gui per MIDP, infatti tramite la classe 'Visual MIDlet', non solo abbiamo la possibilità di creare le form della nostra applicazione, ma anche di gestirne la navigazione in un modo a dir poco efficace.
NetBeans ci dà la possibilità di editare le 'visual MIDlet' in tre modalità, ognuna ad un livello differente.
Al livello più alto troviamo l'editor di flusso (flow) in cui possiamo creare le form, aggiungerci dei controlli, creare comandi e specificarne la funzione.
Proviamo a creare una piccola MIDlet di esempio (il solito hello wold). Alla creazione della classe troviamo già una form, selezionandola ne possiamo modificare le proprietà, in particolare modifichiamo il titolo e il nome dell'istanza rispettivamente in 'Finestra principale' e 'mainForm'. Nel grafico è presente un'altra entità 'mobile device', è lì che inizia e finisce la nostra applicazione, lasciamo quindi che alla partenza (started) la midlet visualizzi la nostra form. A questo punto non ci resta che disegnare l'aspetto di mainForm e per far ciò dobbiamo passare alla modalità screen.
Nella modalità screen abbiamo la possibilità di modificare una alla volta le form della nostra midlet. Tramite la drop-down-list a destra scegliamo la form da modificare (nel nostro caso ce ne sarà solo una), quì notiamo che NetBeans ha già inserito uno stringItem con il testo 'Hello, World!', ma quello che vogliamo noi è che la midlet stampi un saluto personalizzato all'utente. Eliminiamo quindi lo stringItem e inseriamo un textField, modificando la proprietà label in 'Come ti chiami?'. A questo punto dobbiamo decidere dove visualizzare il saluto, potremmo utilizzare un altro form, lo stesso textField oppure uno stringItem, ma decidiamo di utilizzare uno stringItem inserendolo nel form. Cancelliamo il testo della label e impostiamo un font facendo click sul pulsante con i tre puntini, scegliamo di visualizzare il testo in corsivo e di lasciare le altre impostazioni di default.
Ora passiamo alla modalità 'Source' per fare in modo che quando l'utente scriverà il suo nome riceverà un saluto del tipo 'Ciao Tizio'. Per catturare i 'cambiamenti' dei controlli doppiamo implementare l'interfaccia ItemStateListener e di conseguenza il metodo public void itemStateChanged(Item item). D'ora in avanti, ogni volta che un controllo subirà delle modifiche, verrà chiamato il metodo itemStateChanged, possiamo allora implementare il comportamento del metodo, specificando che se il controllo modificato è textField allora stringItem dovrà visualizzare 'Ciao ' + il testo digitato:
public void itemStateChanged(Item item){
if (item==this.getTextField()){
this.getStringItem().setText("Ciao " + this.getTextField().getString());
}
}
dobbiamo in oltre registrare il listener per il form e lo facciamo alla creazione dell'istanza. Cerchiamo il metodo getMainForm, che viene creato automaticamente, e modifichiamo il codice facendo in modo che quando una nuova istanza della form viene creata, venga impostato anche il listener :
public Form getMainForm() {
if (mainForm == null) {
// write pre-init user code here
mainForm = new Form("Finestra Principale", new Item[] { getTextField(), getStringItem() });
mainForm.addCommand(getExitCommand());
mainForm.setCommandListener(this);
mainForm.setItemStateListener(this);
// write post-init user code here
}
return mainForm;
}
Adesso eseguiamo il progetto con F6 e verifichiamo che l'applicazione funzioni... funziona!
Ora manca solo la distribuzione, basta compilare il tutto con F11 che nella sottocartella 'dist' del nostro progetto vengano creati i files necessari sia 'jad' che 'jar'. In oltre ho notato che è disponibile anche una funzione che permette di uploadare i file direttamente sul cellulare, ma non l'ho potuta provate perchè il mio cellulare non era tra i modelli supportati...
Concludendo, devo dire che NetBeans è tutto sommato un buon IDE, se consideriamo che per creare questa applicazione di esempio abbiamo scritto in totale 4 righe di codice, tutto il resto è stato gestito da NetBeans. In oltre devo dire anche che oltre ai progetti J2ME supporta una varietà di altri progetti (Ruby, SOA, UML, JSP e altri), che possiede un po' tutte le principali funzionalità dei migliori IDE, che mi è parso stabile anche su win vista, ma che sembra occupare molte risorse di sistema e sopratutto lento all'avvio. Se dovessi dare un voto darei un bel 7 e mezzo.
Ciao Giuseppe!
RispondiEliminaTrovo molto interessante il tuo post, sono un ragazzo di Informatica dell'università di Potenza dovrei realizzare una piccola midlet su un cellulare per inserire una foto su google maps immettendo indirizzo o coordinate.
Posseggo la versione 5.5.1 di netBeans, non so con che emulatore e plugin integrarlo per sviluppare in j2me. Se potresti essermi di aiuto te ne sarò grato.
Grazie
Devi scaricare la versione di netbeans che integra lo sviluppo j2me. Nella pagina di download (http://www.netbeans.org/downloads/index.html) scegli il bundle java (o in alternativa 'all' che contiene tutte le funzionalità possibili). Ciao
RispondiEliminaComplimenti Giuseppe, semplice e chiaro. Sto cominciando a giocare con J2ME e nn capivo l'approccio Visual... comodo.
RispondiEliminaGrazie mille