Многократные случаи проблемы мидлета j2me - PullRequest
0 голосов
/ 27 июня 2009

У меня есть мидлет j2me, работающий на мобильном телефоне. Код работает нормально, но возникает проблема, которая заключается в том, что программа, похоже, запускает более одного экземпляра. У меня есть код в начале приложения внутри метода appStart (), который запускается дважды при запуске приложения. За время существования программы код отображается дважды, когда текст выводится на экран.

Код выглядит так:

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
}

Понятия не имею, почему код вызывается дважды.

Я кодирую на i290.

Ответы [ 2 ]

2 голосов
/ 27 июня 2009

Это определенно ошибка JVM. startApp() должен вызываться только один раз при запуске и не может быть вызван до тех пор, пока не будет вызван pauseApp() или вы сами не позвоните notifyPaused().

Я предлагаю следующий код:

private boolean midletStarted = false;

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

Таким образом, вы можете отслеживать изменения состояния мидлета. Но на самом деле лучше, чтобы вы вообще не использовали этот метод и вместо этого использовали конструктор.

О, кстати, я не думаю, что есть несколько экземпляров или что-то в этом роде, это просто ошибка JVM.

1 голос
/ 27 июня 2009

Может быть, вы сделали что-то, что сделало вызов во время выполнения pauseApp(), а затем, когда вы установили фокус на приложение, среда выполнения снова вызвала startApp().

Поставь логин в pauseApp() и посмотри что получится.

...