Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe ein Programm geschrieben, das einige unterschiedliche Commands für verschiedene Forms enthält.
Hierbei habe ich das Problem, dass bei manchen Forms keines der Commands funktioniert. Es wird eine NullPointer- Exception geworfen.
Woran könnte das liegen?
Gibt es eine restriktion, wie viele Commands man verwenden darf?
ich versuche es etwas konkreter.
Eines der Commands, die nicht funktionieren:
Java:
//ChoiceGroup definieren
cg3 = new ChoiceGroup("Ergebnisse: ", Choice.EXCLUSIVE);
//Command definieren
private final Command CMD_LIST = new Command("Liste", Command.ITEM, 1);
//die ChoiceGroup mit den Werten aus einem Array befüllen
cg3.append(string[i][0], null);
//das Command der ChoiceGroup zuweisen
cg3.addCommand(CMD_LIST);
//Action definieren
public void commandAction(Command c, Item i) {
if (c==CMD_LIST){
listForm.append("Test");
display.setCurrent(listForm);
}
}
Kann mir jemand sagen, warum das zu einer NullPointerException führt?
Danke und Gruß
AnonymXX
aber Bitte die Zeile relativ zu unserem Quellcode-ausschnitt angeben. Ein einfaches kommenter in der entsprechenden Zeile würde eigentl. schon reichen. Z.B.:
Java:
File abc = null;
abc.exists(); // Hier meldet er mir die NPE
danke für die Antworten. Ich muss den Code erst übersichtlicher machen, bevor ich ihn hier posten kann. Sonst würdet ihr wohl nix verstehen ;-)
Sorry für die Frage, aber was ist der Stacktrace? Meinst du die Anzeige unten, wo angezeigt wird, dass die Exception geworfen wird, also wo die IDE anzeigt, was sie gerade beim Ausführen macht?
Sorry für die Frage, aber was ist der Stacktrace? Meinst du die Anzeige unten, wo angezeigt wird, dass die Exception geworfen wird, also wo die IDE anzeigt, was sie gerade beim Ausführen macht?
jetzt habe ich das MIDlet soweit in Klassen aufteilt, dass es verständlich ist (hoffentlich )
Ich habe jetzt für jedes Form eine eigene Klasse. Vom MIDlet wird das erste Form aufgerufen. Dies ruft dann das zweite auf usw.
Im ersten Form funktioneren die Commands. Aber im zweiten nicht mehr. Ich kann hier die App nicht beenden und auch nicht zum ersten Form zurück.
Hier die Klassen des ersten und des zweiten Forms.
Java:
public class OptionForm extends Form implements ItemCommandListener{
private MIDlet midlet;
private Spacer spacer1;
private ChoiceGroup cg1;
private final String [] optionen = {"Anzeigen", "Eintragen"};
private final Command CMD_END = new Command("Ende", Command.EXIT, 1);
private final Command CMD_NEXT = new Command("Weiter", Command.ITEM, 1);
public OptionForm(MIDlet midlet){
super("ASeNa");
midlet = midlet;
spacer1 = new Spacer(20, 70);
cg1 = new ChoiceGroup("Was möchten Sie tun?", Choice.EXCLUSIVE,
optionen, null);
append(spacer1);
append(cg1);
cg1.setItemCommandListener(this);
cg1.addCommand(CMD_END);
cg1.addCommand(CMD_NEXT);
}
public void commandAction(final Command c, final Item i) {
if(c == CMD_END) {
midlet.notifyDestroyed();
}
else{
int index = cg1.getSelectedIndex();
String txt = cg1.getString(index);
if (txt=="Anzeigen") {
Display.getDisplay(midlet).setCurrent(new ChoiceForm(midlet));
}
if (txt=="Eintragen") {
Display.getDisplay(midlet).setCurrent(new InputForm(midlet));
}
}
}
Java:
public class ChoiceForm extends Form implements ItemCommandListener{
private MIDlet midlet;
private GetThread getThread;
private ChoiceGroup cg2;
public String wahl=null;
private String URI;
private final String [] umkreise = {"1km", "5km", "10km"};
private final Command CMD_END = new Command("Ende", Command.EXIT, 1);
private final Command CMD_BACK = new Command("Zurück", Command.BACK, 1);
private final Command CMD_SEND = new Command("Senden", Command.ITEM, 1);
public ChoiceForm(MIDlet midlet){
super("App");
cg2 = new ChoiceGroup("Anzeigen: ", Choice.EXCLUSIVE, umkreise , null);
cg2.setItemCommandListener(this);
append(cg2);
cg2.addCommand(CMD_END);
cg2.addCommand(CMD_BACK);
cg2.addCommand(CMD_SEND);
}
public void commandAction(final Command c, final Item i) {
if(c == CMD_END) {
midlet.notifyDestroyed();
}
if (c==CMD_BACK){
Display.getDisplay(midlet).setCurrent(new OptionForm(midlet));
}
if (c==CMD_SEND){
//einen GetThred initialisieren und starten
}
}
Der Stacktrace sieht so aus:
Installing suite from: http://127.0.0.1:2690/GesamtApp.jad
TRACE: <at java.lang.NullPointerException: 0>, Exception caught in Display class
java.lang.NullPointerException: 0
at javax.microedition.lcdui.Display.<init>(), bci=94
at javax.microedition.lcdui.Display.addDisplays(), bci=33
at javax.microedition.lcdui.Display.getDisplay(), bci=15
at javax.microedition.lcdui.Display.getDisplay(), bci=1
at ChoiceForm.commandAction(ChoiceForm.java:38)
at javax.microedition.lcdui.Display$ChameleonTunnel.callItemListener(), bci=57
at com.sun.midp.chameleon.layers.SoftButtonLayer.processCommand(), bci=57
at com.sun.midp.chameleon.layers.SoftButtonLayer.commandSelected(), bci=11
at com.sun.midp.chameleon.layers.MenuLayer.keyInput(), bci=436
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)