0

携帯電話で j2me midlet を実行しています。コードは正常に動作しますが、発生する問題は、プログラムがそれ自体の複数のインスタンスを実行しているように見えることです。アプリケーションの開始時に appStart() メソッド内にコードがあり、アプリケーションの開始時に 2 回実行されます。プログラムの存続期間中に、テキストが画面に書き込まれるときに、コードが 2 回実行されていることがわかります。

コードは次のようになります。

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
}

コードが 2 回呼び出される理由がわかりません。

私はi290でコーディングしています。

4

2 に答える 2

2

これは間違いなくJVMのバグです。起動時に一度だけ呼び出す必要があり、が呼び出されるか、自分で呼び出すstartApp()まで、再度呼び出すことはできません。pauseApp()notifyPaused()

私が提案するのは次のコードです:

private boolean midletStarted = false;

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

このようにして、ミッドレットの状態変化を追跡できます。ただし、実際には、このメソッドをまったく使用せず、代わりにコンストラクターを使用することをお勧めします。

ちなみに、複数のインスタンスなどはないと思いますが、これは単なるJVMエラーです。

于 2009-06-26T21:13:53.250 に答える
1

たぶん、ランタイム呼び出しを行う何かをしたpauseApp()後、アプリにフォーカスを設定すると、ランタイムがstartApp()再度呼び出しました。

ログインしてpauseApp()、何が起こるかを確認してください。

于 2009-06-26T21:13:20.707 に答える