سؤال

ولدي midlet 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.

هل كانت مفيدة؟

المحلول

وهذا هو بالتأكيد خلل JVM. ينبغي أن تسمى startApp() مرة واحدة فقط عند بدء التشغيل ولا يمكن أن تسمى مرة أخرى حتى يتم يسمى pauseApp() أو استدعاء notifyPaused() نفسك.

ما أقترح هو البرمجية التالية:

private boolean midletStarted = false;

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

وبهذه الطريقة يمكنك تعقب التغييرات الدولة midlet. ولكن في الواقع فمن الأفضل أن كنت لا تستخدم هذه الطريقة على الإطلاق، واستخدام منشئ بدلا من ذلك.

وأوه، بالمناسبة، لا أعتقد أن هناك بعض الحالات متعددة أو شيء من هذا القبيل، وهذا هو مجرد خطأ JVM.

نصائح أخرى

وربما فعلت ما جعل pauseApp() دعوة وقت التشغيل ثم عند تعيين التركيز إلى التطبيق في وقت دعا startApp() مرة أخرى.

ووضع قطع الأشجار في pauseApp() ونرى ما سيحدث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top