PDA

View Full Version : [J2ME] NullPointerException


jeremy.83
19-09-2008, 20:34
Ciao, ho iniziato a smanettare col J2ME, per un esame.
Ho un problema con la comprensione dei Command, che dovrebbero essere facili, e infatti non riesco a trovare l'errore.
Ad esempio questo stupidissimo codice:

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

public class Interests extends MIDlet implements CommandListener{

private Form formMain, formResults;
private Command cmdExit, cmdBack, cmdGO;
private ChoiceGroup categoria, categoria2;


public Interests(){
init();

}
protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
notifyDestroyed();
}

protected void pauseApp() {
}

protected void startApp() throws MIDletStateChangeException {
Display.getDisplay(this).setCurrent(formMain);
}

private void getResults(){
categoria2 = new ChoiceGroup("Scegli la/le categoria/e di tuo interesse", Choice.MULTIPLE, new String[]{"Ristorante", "Hotel", "Museo", "Cinema", "Teatro"}, null);
formResults.append(categoria2);
formResults.addCommand(cmdBack);
Display.getDisplay(this).setCurrent(formResults);
}
private void init(){

categoria = new ChoiceGroup("Scegli la/le categoria/e di tuo interesse", Choice.MULTIPLE, new String[]{"Ristorante", "Hotel", "Museo", "Cinema", "Teatro"}, null);


cmdExit = new Command("Exit", Command.EXIT, 1);
cmdBack = new Command("Back", Command.BACK, 2);
cmdGO = new Command ("Vai!", Command.OK, 3);

formMain.append(categoria);
formMain.addCommand(cmdExit);


formMain.setCommandListener(this);
formResults.setCommandListener(this);

}
public void commandAction(Command c, Displayable s){
if (c == cmdExit)
notifyDestroyed();
if (c == cmdGO)
getResults();
if (c == cmdBack)
Display.getDisplay(this).setCurrent(formMain);
if (s == formResults && c == cmdBack)
notifyDestroyed();
}
}

mi solleva l'eccezione "java.lang.NullPointerException".
Mi sembra che la sollevi quando lancio il metodo setCommandListener.

C'è da mettere un try catch? Sì ma dove?:confused:

La cosa strana è che in altri esempi che ho io un po' più complessi questa eccezione non viene sollevata.

Scusate per la noobbaggine :D
:help:

Oceans11
19-09-2008, 20:40
se posti per intero il messaggio di errore forse si può capire di più

jeremy.83
19-09-2008, 20:42
se posti per intero il messaggio di errore forse si può capire di più

Scusa, hai ragione,

Unable to create MIDlet Interests
java.lang.NullPointerException
at Interests.init(+98)
at Interests.<init>(+8)
at java.lang.Class.runCustomCode(+0)
at com.sun.midp.midlet.MIDletState.createMIDlet(+34)
at com.sun.midp.midlet.Selector.run(+22)

Grazie per la risposta

Oceans11
19-09-2008, 21:40
aspetta a ringraziarmi...ci sto sbattendo la testa anch'io ma non so perchè non và...si direbbe che neanche parte la midlet, ma non capisco il motivo.
ci sto mettendo parecchio perchè non conosco la ME (l'ho dovuta scaricare e installare per provare) e mi sto leggendo un pò di documentazione.

Intanto puoi sperare che passi qualcuno più preparato di me :D

Oceans11
19-09-2008, 22:07
Ok qualcosa l'ho trovata....dunque:

1) non inizializzi formMain da nessuna parte. Devi fare:
formMain = new Form("titolo che vuoi");
(io lo metterei in startApp())

2) stessa cosa per formResults

3) init() non viene richiamato da nessuno, costruttore a parte, ma il costruttore a sua volta non viene richiamato.

jeremy.83
19-09-2008, 22:28
Ok qualcosa l'ho trovata....dunque:

1) non inizializzi formMain da nessuna parte. Devi fare:
formMain = new Form("titolo che vuoi");
(io lo metterei in startApp())

2) stessa cosa per formResults

3) init() non viene richiamato da nessuno, costruttore a parte, ma il costruttore a sua volta non viene richiamato.

:ave:

Grazie mille, adesso va!!!

Mi hai salvato la vita!

Alla fine l'errore è banale, ma è da un po' che non programmo in java e mi sto troppo abituando al php :)

A buon rendere!
:cincin: :cincin: :mano: :mano: :mano: :mano:

Oceans11
19-09-2008, 22:50
oh sì!!!!!

una birra è ben voluta!!! :D

anche la stretta di mano però ;)