在j2me中终止应用程序的问题,但它并不意味着退出应用程序

时间:2009-09-28 08:11:08

标签: java-me

我在j2me中有案例..我希望在应用程序正在执行代码时终止。这是我的简单代码。

else if (c == cmdStop) {

                //command berhenti
                browser.stop();

            }

 public void stop(){
             // No errors
                  int errorCode = 0;

                 // An error occurred
                    errorCode = -1;

                  // Terminate
                       System.exit(errorCode);

            }

问题是当我尝试终止应用程序时,应用程序仍然工作或继续执行并忽略函数system.exit。

仍然执行此代码

private void paintParserScreen(Graphics g){

        int w = width;
        int h = fontHeight+2;
        int x = 0;
        int y = height - h;

        int curLoaded = 0;
        int value = 0;
        int iPercent = 0;



        if(maxElementNum!=0){
            curLoaded = wapRender.getCurLoadedTag();
            value = curLoaded * 100 / maxElementNum;
            iPercent = (curLoaded * (w - 2)) / maxElementNum;
        }

        g.setColor(0x808080);
        g.fillRect(x, y, w, h);

        g.setColor(0x0000ff);
        g.fillRect(x + 1, y + 1, iPercent - 2, h - 1);

        g.setColor(0xffffff);
        g.drawString("proses..." + value+"%", 
                width>>1, y + 1, Graphics.TOP|Graphics.HCENTER);
    }

他们说

java.lang.SecurityException: MIDP lifecycle does not support system exit.
    at java.lang.Runtime.exit(+9)
    at java.lang.System.exit(+7)
    at com.gameislive.browser.Browser.stop(+8)
    at Tampilkan.commandAction(+147)
    at javax.microedition.lcdui.Display$DisplayAccessor.commandAction(+282)
    at javax.microedition.lcdui.Display$DisplayManagerImpl.commandAction(+10)
    at com.sun.midp.lcdui.DefaultEventHandler.commandEvent(+68)
    at com.sun.midp.lcdui.AutomatedEventHandler.commandEvent(+47)
    at com.sun.midp.lcdui.DefaultEventHandler$QueuedEventHandler.run(+250)

请帮助我该怎么办?

2 个答案:

答案 0 :(得分:0)

尝试在MIDlet实例中调用norifyDestroyed()方法。

答案 1 :(得分:0)

你得到的安全例外说明了一切。

J2ME应用程序的行为与J2SE应用程序不同。

您不会以相同的方式启动它们,也不会以相同的方式终止它们。

在您的情况下,您尝试编写的J2ME应用程序类型称为MIDlet。

MIDlet生命周期由MIDP运行时调节,该运行时在Java虚拟机之上运行,该虚拟机只执行Java字节码并处理系统资源。

当MIDlet启动时,MIDP运行时调用MIDlet构造函数及其javax.microedition.midlet.MIDlet.startApp()覆盖。

为了终止MIDlet,MIDP运行时调用javax.microedition.midlet.MIDlet.destroyApp()覆盖。

当MIDlet决定可以终止它时,它可以调用自己的destroyApp(),而不是等待MIDP运行时执行它。

为了告诉MIDP运行时它可以安全地终止,MIDlet必须调用javax.microedition.midlet.MIDlet.notifyDestroyed(),通常作为destroyApp()中的最后一个方法调用

我建议阅读MIDP specifications以了解所有生命周期和运行时问题。

最新的JavaME SDK还包含许多正确构建的MIDlet,供您灵感使用。