Commands funktionieren manchmal nicht

AnonymXX

Mitglied
Hallo,

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?

Danke und viele Grüße

AnonymXX
 
Zuletzt bearbeitet:

AnonymXX

Mitglied
Ok,

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
 
T

Tomate_Salat

Gast
...die Zeile in der sie auftritt, wären hilfreich.
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
 

AnonymXX

Mitglied
Hallo,

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?

Gruß

AnonymXX
 

AnonymXX

Mitglied
Ja, leider sitze ich immer noch dran, den Code in einzelne Klassen aufzuteilen... ist gar nicht so einfach :(

Ich hoffe, dass ich es heute noch schaffe.

Gruß

AnonymXX
 

AnonymXX

Mitglied
So,

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)

Ich hoffe,es findet jemand meinen Fehler.

Gruß

AnonymXX
 

Chéfkóch

Mitglied
Mach mal aus

Java:
    public OptionForm(MIDlet midlet){
        super("ASeNa");
        midlet = midlet;
        ...
}

das hier:

Java:
    public OptionForm(MIDlet midlet){
        super("ASeNa");
        this.midlet = midlet;
        ...
}

Ich denke dann sollte es gehen :D
 

Neue Themen


Oben