我刚刚开始深入研究Java ME的奇迹,但在尝试创建线程时却感到沮丧......
以下是编译绝对精细的代码。但是,只要我在G600上安装并运行它,就会弹出“Java Game Error”。
我把它放在一个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) {}
}
}
};
注意:是的,这不是游戏,只是说明了我面临的问题。
提前致谢!
答案 0 :(得分:1)
只是一个疯狂的猜测,但Java中的一般规则是你无法从主线程中“触摸”UI。好吧,这有点粗略解释,但有很多关于这个主题的文章。
我建议您避免从单独的线程调用paint()
或flushGraphics()
等UI方法。
我希望它有所帮助。
答案 1 :(得分:0)
你在手机之前在模拟器上测试了吗?如果不是 - 为什么?如果是的话 - 它是怎么回事?
关于代码它看起来不错,除了 slippery 两行,你从构造函数创建和启动线程。我宁愿在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();
}