J2ME中子线程中死循环

来源:百度知道 编辑:UC知道 时间:2024/06/05 12:15:26
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;

public class Arcdemos extends Canvas implements Runnable{
int x,r,y;
String s;
Thread t;
public Arcdemos() {
x=this.getWidth();
y=this.getHeight();
r=50;
t=new Thread(this);
t.start();
s = Thread.currentThread().getName();

}

protected void paint(Graphics g) {
//clear(g);
g.fillArc(x/2-r,y/2-r,r*2,r*2,0,360);
g.drawLine(0,0,r*2,r*2);

}
protected void keyPressed(int keyCode){
int k=getGameAction(keyCode);
if(k==UP){
r++;
System.out.println(r+s+t);
}
if(k==DOWN){
r--;
}
}

public void run() {
while(true){
repaint();}
}
void clear(Graphics g){
g.setColor(255,255,255);
g.fillRect(0, 0, x, y);

g.setColor(250,100,136);

并不是说非要用到while(ture)这个死循环 ,手机键盘按键才有效,而是在你的死循环中所做的是不断地刷新屏幕,这样你才能看到屏幕的变化,如果不这样做,那么你的keyPressed方法虽然也在调用,你的r值也在改变,但是没有刷新屏幕,用户就看不到你r数值的变化,这样说你明白了吗?你可以在keyPressed方法中输出一句话,这样你就可以发现,即使不是死循环,在你按下按键的时候后台也是会输出地。

补充回答,其实在真正的游戏中很少用到这样的死循环,而是定义一个布尔型的变量,设置为true放在那里,在需要的时候把它设成false就可以退出线程,手机游戏少不了这样的结构,不会太卡。