我刚刚开始研究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();
}