j2me用sleep实现线程暂停的问题

来源:百度知道 编辑:UC知道 时间:2024/06/16 20:17:30
代码写成伪代码如下:

run方法:
while(true){repaint();}

paint方法:
switch(状态){
case 1:画图1;状态转2;break;
case 2:画图2;sleep1秒;状态转3;break;
case 3:画图3;sleep1秒;状态转1;break;
}

实现后每次都只是在画完图2后停顿了1秒,而画完图3后没有停顿直接转状态1了,这是为什么???高手请帮忙解答一下啊……
_wujiaojun说的原理我似懂非懂……
而且你的解决方法不行哦,我必须需要在case 1里头的语句没有停顿……

waxxysys你的代码一看就是错的好不好……在change()里头每次都把n重新置0了诶……这有什么用啊???

……我自己用Timer解决了……j2me真麻烦……

int n;

public vodi change(){
switch(状态){
case 1:
n=0;
if(n==20)//2秒 //如果要从1到2没有停顿就把这句不要
状态转2;break;
case 2:
n=0;
if(n==10)
状态转3;break;
case 3:
n=0;
if(n=10)
状态转1;break;
}
}

run方法改成:
while(true){
n++;
change();
repaint();
Thread.sleep(100L);
}

paint方法:
switch(状态){
case 1:画图1;break;
case 2:画图2;break;
case 3:画图3;break;
}

这样就可以了..

解决办法:在case 1:画图1;状态转2;break; 这里里面同样要加一个 sleep(1000);

repaint();方法只是简单的回调功能。
我想执行drawImage之后也并不能你能直接看到效果的。正真让你能看到效果显示在display 的serviceRepaints(displayable)之后。

你的程序中:
所以执行case3时 图3 只在displayable上,当前显示的是图2.因为case 1没有sleep() 所以瞬间就把图3 覆盖了。执行到 case 2 是图2 只能在displayable 上 就sleep()了。