2009-06-26 8 views
0

Ich habe eine j2me Midlet läuft auf einem Handy. Der Code funktioniert gut, aber das Problem, das auftritt, ist, dass das Programm mehr als eine Instanz von sich selbst zu laufen scheint. Ich habe Code am Anfang der Anwendung in der appStart() -Methode, die beim Start der Anwendung zweimal ausgeführt wird. Während der Laufzeit des Programms kann der Code zweimal durchlaufen werden, wenn Text auf den Bildschirm geschrieben wird.Mehrere Instanzen von j2me Midlet Problem

Der Code sieht wie folgt aus:

public MyClass() 
{ 
    form = new Form("MyProgram"); 
    cmdClose = new Command("EXIT", Command.EXIT, 1); 

    form.addCommand(cmdClose); 
    form.setCommandListener(this); 

    display = Display.getDisplay(this); 
    display.setCurrent(form); 
} 

public void startApp() 
{ 
    form.append("App starting\n"); 
    // Rest of program 
} 

Ich habe keine Ahnung, warum der Code zweimal aufgerufen wird.

Ich bin auf dem i290 codieren.

Antwort

2

Dies ist definitiv ein JVM-Fehler. startApp() sollte beim Start nur einmal aufgerufen werden und kann nicht erneut aufgerufen werden, bis pauseApp() aufgerufen wird oder Sie selbst anrufen.

Was ich vorschlagen, ist der folgende Code:

private boolean midletStarted = false; 

public void startApp() { 
    if (!midletStarted) { 
     midletStarted = true; 
     //Your code 
    } 
} 

Auf diese Weise können midlet Zustandsänderungen verfolgen können. Aber in der Tat ist es besser, dass Sie diese Methode überhaupt nicht verwenden und stattdessen Konstruktor verwenden.

Oh, übrigens, ich glaube nicht, dass es mehrere Instanzen oder etwas ähnliches gibt, das ist nur ein JVM-Fehler.

+1

Es muss kein JVM-Problem sein, da startApp() in Varioud-Instanzen aufgerufen werden kann, z. B. wenn der Bildschirm des Telefons abgedunkelt wird oder aufgrund verschiedener Ereignisse die Anwendungen in den Hintergrund und Vordergrund versetzt werden. Die Korrektur, die Sie angegeben haben, ist jedoch korrekt! – Ram

+0

Wenn die Anwendung in den Hintergrund gestellt wird, sollte pauseApp() an erster Stelle aufgerufen werden. In diesem Fall würde der Fehler nicht die pauseApp() -Methode aufrufen, aber es ist trotzdem ein Fehler. – Malcolm

+0

pauseApp() wird nicht unbedingt in allen Implementierungen aufgerufen, sondern es werden die Befehle showNotify und hideNotify verwendet. Ihre Konnotation ist jedoch richtig! – Ram

1

Vielleicht haben Sie etwas gemacht, das den Laufzeitaufruf pauseApp() gemacht hat und dann, wenn Sie den Fokus auf die App gesetzt haben, rief die Laufzeit wieder startApp() auf.

Setzen Sie die Anmeldung pauseApp() und sehen, was passiert.