質問

私は、J2MEのMIDletが携帯電話上で実行されています。コードが正常に動作しますが、起動した問題は、プログラム自体の複数のインスタンスを実行しているように見えるということです。私は、アプリケーションの起動時に二回実行さ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上でコーディングしています。

役に立ちましたか?

解決

これは間違いなく、JVMのバグです。 startApp()は起動時に一度だけ呼ばれるべきとpauseApp()呼ばれたり、notifyPaused()自身を呼び出すされるまで、再び呼び出すことはできません。

私は何を示唆すると、次のコードです。

private boolean midletStarted = false;

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

あなたはMIDletの状態の変化を追跡することができますこの方法。しかし、実際には、それはあなたがすべてでは、このメソッドを使用し、代わりにコンストラクタを使用しない方が良いです。

ああ、ところで、私はいくつかの複数のインスタンスまたはそのような何かがあるとは思わない、これは単にJVMエラーです。

他のヒント

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

でログを入れ<=>と何が起こるか見ています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top