Várias instâncias do problema j2me midlet
Pergunta
Eu tenho um midlet j2me rodando em um telefone celular. O código fina funciona, mas a questão que surge é que o programa parece estar a correr mais do que uma instância de si mesmo. Eu tenho o código no início da aplicação dentro do método Appstart () que é executado duas vezes quando o aplicativo é iniciado. Durante a vigência do programa, o código pode ser visto correndo duas vezes quando o texto está escrito na tela.
Os olhares código como este:
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
}
Eu não tenho idéia por que o código está sendo chamado duas vezes.
Eu estou codificação no i290.
Solução
Este é definitivamente um bug JVM. startApp()
deve ser chamado apenas uma vez na inicialização e não pode ser chamado novamente até pauseApp()
é chamado ou você chamar notifyPaused()
si mesmo.
O que eu sugiro é o seguinte código:
private boolean midletStarted = false;
public void startApp() {
if (!midletStarted) {
midletStarted = true;
//Your code
}
}
Desta forma, você pode acompanhar as mudanças de estado de MIDlets. Mas, na verdade, é melhor que você não usar este método em tudo e utilização construtor vez.
Oh, a propósito, eu não acho que há algumas várias instâncias ou algo assim, este é apenas um erro JVM.
Outras dicas
Talvez você fez algo que fez a pauseApp()
chamada tempo de execução e, em seguida, quando você definir o foco para o aplicativo o tempo de execução chamado startApp()
novamente.
Coloque o registo em pauseApp()
e ver o que acontece.