Loops JavaME冻结系统中退出游戏循环

Loops JavaME冻结系统中退出游戏循环,loops,java-me,freeze,midp-2.0,Loops,Java Me,Freeze,Midp 2.0,我正在开发JavaME游戏,并使用LG500G和摩托罗拉EM326g作为测试设备。在这个非常早期的阶段,事情就出了问题。我有一个while(!stop){}游戏循环,在某一点上,一个方法将stop设置为true,它将在while循环之后输入一段代码,这是一种结束游戏的条件。这在emulator中总是很好地工作,我用各种方式表达了它。然而,我从未能让它在任何一部手机上工作。相反,游戏冻结,没有进一步的活动发生。令人费解的是,当我从我研究过的其他使用相同循环机制的游戏中编译代码时,这些游戏会按预期运

我正在开发JavaME游戏,并使用LG500G和摩托罗拉EM326g作为测试设备。在这个非常早期的阶段,事情就出了问题。我有一个while(!stop){}游戏循环,在某一点上,一个方法将stop设置为true,它将在while循环之后输入一段代码,这是一种结束游戏的条件。这在emulator中总是很好地工作,我用各种方式表达了它。然而,我从未能让它在任何一部手机上工作。相反,游戏冻结,没有进一步的活动发生。令人费解的是,当我从我研究过的其他使用相同循环机制的游戏中编译代码时,这些游戏会按预期运行!我可能做错了什么?有没有一种方法可以让代码重新措辞以使其正常工作?我目前正在寻找一个“游戏状态管理器”作为一个可能的解决方案…但像这样简单的事情应该只是工作!(顺便说一下,我尝试了一个简单的while(!stop){}循环,但必须在while(true)循环中尝试if(!stop){}else{}块。它在手机上也不起作用:

    import java.io.IOException;
    import javax.microedition.lcdui.Graphics;
    import javax.microedition.lcdui.Image;
    import javax.microedition.lcdui.game.*;

    public class GardenGameCanvas extends GameCanvas implements Runnable{
private Image tomato;
private Sprite tomatoSprite;
private boolean stop;
private int tomX;
private int tomY;
private LayerManager manager;

    public GardenGameCanvas(){
    super(false);
}
public void start() {
    try{
        tomato = Image.createImage("/tomato.png");
        tomatoSprite = new Sprite(tomato, 16, 16);
        tomX= 0;
        tomY = getHeight()/2;
        manager = new LayerManager();
        manager.append(tomatoSprite);
        stop = false;

        }catch(IOException ioex){System.err.println(ioex);}
    Thread runner = new Thread(this);
    runner.start();

    }

public void run() {
    while(true){
        if(!stop){
        verifyGame();
        checkInput();
        update(getGraphics());
        try {
              Thread.currentThread().sleep(30);
            } catch(Exception e) {}

    }else{
    endGame(getGraphics());
    }
    }
}
private void update (Graphics g){
    g.setColor(0xFFFFFF); //white
    g.fillRect(0, 0, getWidth(), getHeight());
    buildGame(g);
    tomatoSprite.setPosition(tomX, tomY);
    manager.paint(g, 0, 0);
    flushGraphics();
}
private void buildGame(Graphics g){
    g.setColor(0x000000);
    g.drawLine(0, getHeight()/2, getWidth(), getHeight()/2);

}
private void checkInput(){
    int keyStates = getKeyStates();
    if((keyStates & LEFT_PRESSED) != 0) {
        tomX -= 1;
         }
else if((keyStates & RIGHT_PRESSED) != 0) {
        tomX += 1;
}
}
private void endGame(Graphics g){
    g.setColor(0xFFFFFF);
    g.fillRect(0,0,getWidth(), getHeight());
    g.setColor(0x000000);
    g.drawString("Game Over", getWidth()/2, getHeight()/2, Graphics.HCENTER);
    flushGraphics();
}
private void verifyGame(){
    if(tomX==getWidth()){
        stop = true;
        return;
    }
}
}

我认为问题在于: 你永远不会结束while循环

模拟器和设备处理线程和进程的方式不同。运行线程可能会占用设备上的所有时间

请尝试以下示例:

while (true){
    if(!stop){
       ....
    }
    else {
       endGame();
       return;
    }
}

错误可能在第106行。但我不能确定,因为您没有粘贴任何代码。