本人是个新手,这是一个小程序,可以自动的把圆圈从小变大.先看程序吧:
import java.awt.*;
import java.applet.*;
public class app45 extends Applet implements Runnable
{ Thread t=null;
int x,y,r;
public void init()
{
x=100;
y=100;
r=10;
}
public void paint(Graphics g)
{ g.setColor(Color.white);
g.drawArc(x,y,r,r,0,360);
if(t!=null&&r <300)
{r+=10;
g.setColor(Color.pink);
g.drawArc(x,y,r,r,0,360);
if(r> 300)
t.stop();
}
}
public void start()
{ if(t==null)
{ t=new Thread(this);
t.start();}
}
public void stop()
{ t.stop();
t=null;
}
public void run()
{
while(t!=null)
{try
{ Thread.sleep(800);
}
catch(InterruptedException e)
{}
repaint(); //这个地方不太明白
}
}
public void update(Graphics g)
{paint(g);}
}
这个地方不太明白:这里面有几个线程?是不是类本身app45实现runnable接口算一个,然后t也算一个呢?这就2个了???
书上说Thread.sleep(800);是为了程序的执行暂时停下来,使得CPU有时间去调用repaint()方法.线程暂停sleep是把CPU让给其他正在排队的线程呀,让给哪个线程呢?如果已经让给别的线程了,那暂停下来的线程还怎么会去执行repaint呢?
------解决方案--------------------
sleep 就是停止当前进程800ms 让给repaint()所重绘的组件
对于本程序而言repaint()方法会调用此组件的 paint 方法。就是CPU时间交给paint()这个方法
------解决方案--------------------
意思是:把CPU交给处理用户输入的线程。