Question

J'ai un midlet j2me fonctionnant sur un téléphone portable. Le code fonctionne bien, mais le problème qui se pose est que le programme semble exécuter plus d'une instance de lui-même. J'ai du code au début de l'application dans la méthode appStart () qui s'exécute deux fois au démarrage de l'application. Pendant la durée de vie du programme, le code peut être vu s’exécuter deux fois lorsque du texte est écrit à l’écran.

Le code ressemble à ceci:

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
}

Je ne sais pas pourquoi le code est appelé deux fois.

Je code sur le i290.

Était-ce utile?

La solution

C’est définitivement un bogue de la machine virtuelle Java. startApp() doit être appelé une seule fois au démarrage et ne peut pas être appelé jusqu'à ce que pauseApp() soit appelé ou que vous appeliez notifyPaused() vous-même.

Ce que je suggère est le code suivant:

private boolean midletStarted = false;

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

De cette façon, vous pouvez suivre les changements d'état de midlet. Mais en fait, il vaut mieux ne pas utiliser cette méthode du tout et utiliser le constructeur à la place.

Oh, au fait, je ne pense pas qu'il y ait plusieurs instances ou quelque chose comme ça, c'est simplement une erreur de la JVM.

Autres conseils

Peut-être que vous avez fait quelque chose qui a appelé l'appel d'exécution pauseApp(), puis lorsque vous avez défini le focus sur l'application, l'application d'exécution a appelé à nouveau startApp().

Connectez-vous à <=> pour voir ce qui se passe.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top