Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/sharepoint/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java me j2me midlet问题的多个实例_Java Me_Instance_Midp_Midlet_Lcdui - Fatal编程技术网

Java me j2me midlet问题的多个实例

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

我有一个运行在手机上的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上编码。

可能是您做了一些事情,使运行时调用了
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