# Commands funktionieren manchmal nicht



## AnonymXX (16. Jun 2010)

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


----------



## Tomate_Salat (16. Jun 2010)

AnonymXX hat gesagt.:


> Woran könnte das liegen?


An vielem



> Gibt es eine restriktion, wie viele Commands man verwenden darf?


Nein


----------



## AnonymXX (16. Jun 2010)

Ok,

ich versuche es etwas konkreter.
Eines der Commands, die nicht funktionieren:


```
//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
```


----------



## The_S (17. Jun 2010)

Die NullPointerException + die Zeile in der sie auftritt, wären hilfreich.


----------



## Chéfkóch (17. Jun 2010)

am Besten schickst du gleich den kompletten Code mit. 
Der Stacktrace wäre auch interessant...


----------



## Tomate_Salat (17. Jun 2010)

The_S hat gesagt.:


> ...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.:


```
File abc = null;
abc.exists(); // Hier meldet er mir die NPE
```


----------



## AnonymXX (17. Jun 2010)

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


----------



## Chéfkóch (17. Jun 2010)

AnonymXX hat gesagt.:


> 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?



Genau das Ding mein ich 

btw muss das ja ein seeehr unübersichtlicher Code sein wenn du bis jetzt nicht damit rausgerückt bist :lol:


----------



## AnonymXX (17. Jun 2010)

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 (19. Jun 2010)

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.


```
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));
            }
        }

  }
```


```
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 (19. Jun 2010)

Mach mal aus


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

das hier:


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

Ich denke dann sollte es gehen


----------



## AnonymXX (19. Jun 2010)

So klappt es  Super!

@ Chéfkóch: vielen Dank!

Gruß

AnonymXX


----------

