我封装了一个类 想实现 运行后产生一个矩形 然后矩形向右运动,于是用wait
方法 使运动过程可见 但是wait(timeout),wait并没有等待timeout秒,这是怎么回事?还有怎么才能实现让矩形慢慢向右运动呢?
 import javax.swing.*;
import java.awt.*;
class RectangleEx extends JFrame{
    private int height=0,width=0;//declare fields;
    public RectangleEx(){    }//constructor;
    public void setHeight(int h){
        height=h;
    }
    public void setWidth(int w){
        width=w;
    }
    public int calculateArea(){
        return height*width;
    }
    @Override
    public void paint(Graphics g){
        int s=0;
        for(int i=60;i<=500;i++){
        g.clearRect(i-1, 50, width, height);//清除前面的矩形;
        //g.drawRect(i,50, width, height);
        s=(i-60)%6;//用此产生6种情况以改变颜色;
        switch (s){//选择颜色;
            case 0:
                g.setColor(Color.red);
                break;
            case 1:
                g.setColor(Color.BLUE);
                break;
            case 2:
                g.setColor(Color.PINK);
                break;
            case 3:
                g.setColor(Color.ORANGE);
                break;
            case 4:
                g.setColor(Color.GRAY);
                break;
            case 5:
                g.setColor(Color.MAGENTA);
                break;
        }
        g.fillRect(i, 50, width, height);
        try{
        g.wait(100);
        }
        catch(Exception e){
            System.out.println("wenti");
        }//为什么此处用wait()方法不管用?
        }
    }
    public void draw(){
        //this.setForeground(Color.blue);
        this.setBackground(Color.yellow);//设置背景;
        this.setSize(600,500);//设置窗口大小;
        this.setVisible(true);//可见;
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//关闭窗口,关闭程序;
        this.setResizable(false);//禁止改变窗口大小;
        repaint();
    }
}
代码如上,帮忙解决一下,谢谢

解决方案 »

  1.   

    paint()不是同步的方法,为什么用wait()呢..没有对象锁就抛异常了Thread.sleep(100) 不行吗
      

  2.   

    wait要notify唤醒,一般多线程用吧。
    直接sleep吧
      

  3.   

    wait是属于Object类的,是需要和notify一块使用的。
    直接用sleep就好了
      

  4.   

    public class  RectangleTest
    {
    public static void main(String[] args) 
    {
    RectangleEx c1=new RectangleEx();
    c1.setHeight(60);
    c1.setWidth(60);
    c1.draw();
    }
    }
    这是测试类的代码  为什么矩形会走两遍呢?  不就一个for循环吗 可是矩形走到头回来又走一遍