Domanda

Ho un midlet j2me in esecuzione su un telefono cellulare. Il codice funziona bene, ma il problema che si presenta è che il programma sembra eseguire più di un'istanza di se stesso. Ho il codice all'inizio dell'applicazione all'interno del metodo appStart () che viene eseguito due volte all'avvio dell'applicazione. Durante la durata del programma, il codice può essere visualizzato due volte quando il testo viene scritto sullo schermo.

Il codice è simile al seguente:

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
}

Non ho idea del perché il codice venga chiamato due volte.

Sto codificando su i290.

È stato utile?

Soluzione

Questo è sicuramente un bug JVM. startApp() deve essere chiamato solo una volta all'avvio e non può essere richiamato fino a quando non viene chiamato pauseApp() o non si chiama notifyPaused().

Quello che suggerisco è il seguente codice:

private boolean midletStarted = false;

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

In questo modo è possibile tenere traccia delle modifiche allo stato delle midlet. Ma in effetti è meglio non usare questo metodo e usare invece il costruttore.

Oh, a proposito, non penso che ci siano alcune istanze multiple o qualcosa del genere, questo è semplicemente un errore JVM.

Altri suggerimenti

Forse hai fatto qualcosa che ha fatto chiamare il runtime pauseApp() e quindi quando hai impostato lo stato attivo sull'app il runtime ha chiamato di nuovo startApp().

Inserisci la registrazione <=> e vedi cosa succede.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top