Attualmente sto lavorando con MIDlet (utilizzo un MIDlet visivo) in Netbeans e viene generata una NullPointerException ma non so perché.J2ME (Java) - Eccezione puntatore nullo rilevata nella classe display
Nota: L'eccezione non viene generata quando il programma viene eseguito sull'emulatore, solo quando viene premuto il pulsante OK Comando.
Ecco l'errore che ottengo
TRACE: <at java.lang.NullPointerException: 0>, Exception caught in Display class
java.lang.NullPointerException: 0
at javax.microedition.lcdui.Display$ChameleonTunnel.callScreenListener(), bci=46
at com.sun.midp.chameleon.layers.SoftButtonLayer.processCommand(), bci=74
at com.sun.midp.chameleon.layers.SoftButtonLayer.soft1(), bci=37
at com.sun.midp.chameleon.layers.SoftButtonLayer.keyInput(), bci=36
at com.sun.midp.chameleon.CWindow.keyInput(), bci=38
at javax.microedition.lcdui.Display$DisplayEventConsumerImpl.handleKeyEvent(), bci=17
at com.sun.midp.lcdui.DisplayEventListener.process(), bci=277
at com.sun.midp.events.EventQueue.run(), bci=179
at java.lang.Thread.run(Thread.java:619)
ho spogliato fuori tutto il codice estranei a l'eccezione, in modo che si può leggere più facile. Di seguito è una versione semplificata se il codice che ho, che genera l'eccezione di cui sopra.
package stMidlet;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
public class StoryMidlet extends MIDlet implements CommandListener {
private boolean midletPaused = false;
private Command commandOk1;
private Form form1;
private TextField textField1;
public StoryMidlet() {
commandOk1 = new Command("Ok", Command.OK, 1);
textField1 = new TextField("Enter value: ", null, 120, TextField.ANY);
form1 = new Form(null, new Item[]{textField1});
form1.addCommand(commandOk1);
Display.getDisplay(this).setCurrent(form1);
}
/* There were some methods here pre-inserted by netbeans. */
/* I have not changed these, but I can post them if you need me too */
/* initialize() */
/* startMIDlet() */
/* resumeMidlet() */
/* switchDisplayable */
/* getDisplay() */
/* exitMidlet() */
/* startApp() */
/* pauseApp() */
/* destroyApp() */
public void commandAction(Command c, Displayable d) {
if (c == commandOk1)
{
System.out.println("Test");
}
}
}
Ho cercato di risolvere questo per almeno un'ora, senza prevalere. L'unica cosa che posso pensare è degno di nota:
- Netbeans ha mostrato un avviso con la linea Display.getDisplay (questo) ..... dicendo che c'era una perdita nel costruttore. L'ho spostato nel metodo initialize() che ha sedato l'avviso, ma l'eccezione si verifica ancora.
Qualsiasi aiuto sarà molto apprezzato.
Grazie, Tom.
Eseguire il debug per solo un'ora? Hai di più nel serbatoio. Una nota seria, fai un respiro profondo e allontanati per qualche ora. Lo otterrai sicuramente se qualcuno su SO non è il primo. – Mike
Si dice che display.getDisplay (this) perde perché 'this' sta sfuggendo al costruttore. In base alla configurazione del costruttore, tuttavia, è improbabile che ciò causi NullPointerEXception (dato che tutto è già stato inizializzato) –