我刚刚开始研究Java ME的奇迹,但是在尝试创建线程时感到沮丧……

下面是绝对可以编译的代码。但是,一旦我在G600上安装并运行它,就会弹出“ Java游戏错误”。

我将其放入jar文件并安装的方法有效,因为我创建了一个没有线程的游戏,并且效果很好。

import java.util.Random;
import javax.microedition.lcdui.*;
import javax.microedition.lcdui.game.*;
import javax.microedition.midlet.*;

public class CanvasTest extends MIDlet {
Display display;

public CanvasTest() {

}

public void startApp() {
  TestCanvas thecanvas = new TestCanvas();
  display = Display.getDisplay(this);
  display.setCurrent(thecanvas);
}

public void pauseApp() {}

public void destroyApp(boolean unconditional) {}
}
class TestCanvas extends GameCanvas implements Runnable {
Font font;

int width;
int height;

boolean running = true;

public TestCanvas() {
    super(false);
    setFullScreenMode(true);
    width = getWidth();
    height = getHeight();
    Thread thisThread = new Thread(this);
    thisThread.start();

}
public void paint(Graphics g) {
    Random rand = new Random();
    g.setColor(rand.nextInt(255), rand.nextInt(255), rand.nextInt(255));
    g.fillRect(0, 0, width, height);

}
public void run() {
  while(running) {
    paint(getGraphics());

    flushGraphics();

    try {
        Thread.sleep(50);
    }
    catch(InterruptedException ex) {}
  }
}
};


注意:是的,这不是游戏,它只是演示了我面临的问题。

提前致谢!

最佳答案

您在电话之前在模拟器上测试过吗?如果没有-为什么?如果是,情况如何?

关于代码,对我来说看起来还可以,除了您从构造函数创建和启动线程的两行代码。我宁愿将这两行移到startApp的末尾

public void startApp() {
    TestCanvas theCanvas= new TestCanvas();
    display = Display.getDisplay(this);
    display.setCurrent(theCanvas);
    new Thread(theCanvas).start(); // add here and...
}
//...
public TestCanvas() {
    super(false);
    setFullScreenMode(true);
    width = getWidth();
    height = getHeight();
    // ...and remove here
    // Thread thisThread = new Thread(this);
    // thisThread.start();
}

07-24 21:48