Java me j2me midlet问题的多个实例
我有一个运行在手机上的j2me midlet。代码工作正常,但出现的问题是,程序似乎正在运行多个自身实例。我在appStart()方法中有应用程序开头的代码,该方法在应用程序启动时运行两次。在程序的生命周期内,当文本写入屏幕时,可以看到代码运行两次 代码如下所示:Java me j2me midlet问题的多个实例,java-me,instance,midp,midlet,lcdui,Java Me,Instance,Midp,Midlet,Lcdui,我有一个运行在手机上的j2me midlet。代码工作正常,但出现的问题是,程序似乎正在运行多个自身实例。我在appStart()方法中有应用程序开头的代码,该方法在应用程序启动时运行两次。在程序的生命周期内,当文本写入屏幕时,可以看到代码运行两次 代码如下所示: public MyClass() { form = new Form("MyProgram"); cmdClose = new Command("EXIT", Command.EXIT, 1); form.a
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上编码。可能是您做了一些事情,使运行时调用了
pauseApp()
,然后当您将焦点设置到应用程序时,运行时再次调用了startApp()
将日志记录到
pauseApp()
中,看看会发生什么。可能是您做了一些事情,使运行时调用了pauseApp()
,然后当您将焦点设置到应用程序时,运行时再次调用了startApp()
将日志记录放到pauseApp()中,看看会发生什么。这肯定是一个JVM错误
startApp()
应该在启动时只调用一次,并且在调用pauseApp()
或您自己调用notifyPaused()
之前不能再次调用
我建议使用以下代码:
private boolean midletStarted = false;
public void startApp() {
if (!midletStarted) {
midletStarted = true;
//Your code
}
}
这样可以跟踪midlet状态的更改。但事实上,最好不要使用这个方法,而是使用构造函数
哦,顺便说一句,我不认为存在多个实例或类似的情况,这只是一个JVM错误。这肯定是一个JVM错误
startApp()
应该在启动时只调用一次,并且在调用pauseApp()
或您自己调用notifyPaused()
之前不能再次调用
我建议使用以下代码:
private boolean midletStarted = false;
public void startApp() {
if (!midletStarted) {
midletStarted = true;
//Your code
}
}
这样可以跟踪midlet状态的更改。但事实上,最好不要使用这个方法,而是使用构造函数
哦,顺便说一句,我不认为存在多个实例或类似的情况,这只是一个JVM错误。这不一定是JVM问题,因为在各种实例中可能会调用startApp(),例如当手机屏幕变暗或由于各种事件将应用程序置于后台和前台时。但是,您给出的修复是正确的!如果将应用程序置于后台,则应首先调用pauseApp()。在这种情况下,错误不会调用pauseApp()方法,但无论如何它仍然是一个错误。pauseApp()不一定在所有实现中都被调用,而是使用showNotify和hideNotify。然而,你的内涵是正确的!“midletStarted”布尔值绝对是处理此问题的正确方法,+1这不一定是JVM问题,因为startApp()可以在各种实例中调用,例如当手机屏幕变暗或由于各种事件将应用程序置于后台和前台时。但是,您给出的修复是正确的!如果将应用程序置于后台,则应首先调用pauseApp()。在这种情况下,错误不会调用pauseApp()方法,但无论如何它仍然是一个错误。pauseApp()不一定在所有实现中都被调用,而是使用showNotify和hideNotify。然而,你的内涵是正确的!“midletStarted”布尔值绝对是处理此问题的正确方法,+1