我在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)
请帮助我该怎么办?
答案 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,供您灵感使用。