我知道J2ME已经过时了,但是我必须为分配作业这样做。当前,我正在使用GameCanvas类,并且我的游戏是线程,因此我的代码如下所示。

class Game extends GameCanvas implements Runnable {
    public GameCanvas() {
        super(false);
    }

    public void run() {
        while (true) {
            draw();
            flushGraphics();
        }
    }

    protected void keyPressed(int keyCode) {
        System.out.println("Hey, it actually worked.");
        // other code to handle key press...
    }
}


可悲的是,无论我的垃圾邮件在模拟器的数字键盘上受到多大的打击,都不会调用keyPressed方法。我知道getKeyStates()具有的GameCanvas方法,但是我不想使用它,因为我不仅要捕获游戏键,还要捕获数字键1〜9。

有谁知道为什么我的代码不进入我的keyPressed()方法,以及我能做什么?非常感谢。



不知道我哪里出了问题...但是在这里和那里进行了一些调整之后,它开始工作得很好。非常感谢你们! :)

最佳答案

您在Game#run方法中有一个busy wait,最有可能导致设备忽略所有匹配,从而使UI失去响应能力。

为了简单测试上述假设是否正确,只需在循环中插入sleep,如下所示:

    while (true) {
        draw();
        flushGraphics();
        try { Thread.sleep(100); } // sleep for 1/10 sec
        catch (InterruptedException ie) { System.out.println(ie); }
    }


如果上述方法有助于恢复UI响应能力,请重新设计应用程序以避免繁忙的等待-MIDP API提供了两种方法来实现这一目标。

10-06 06:03