我想写这样一个程序,在一个frame中,用两个线程在随机的位置画方和圆,但是我希望的是,在第二次画的时候,能够自动把第一次画的给清空掉.比如第一次在(50,50)处画了一个圆,下一次在(100,100)处画圆的时候,就应该看不见(50,50)那个地方的圆. 我的代码如下:
import javax.swing.*;
import java.awt.*;
import java.util.*;public class Circle extends JFrame{
public Circle(String title){
super(title);
this.setSize(400,400);
this.setVisible(true);
circle.start();
} public void onpaint(Graphics g){
invalidate();
if(circle.getState()==Thread.State.TERMINATED){
circle=new DrawCircleClass(g);
circle.start();
}
}

DrawCircleClass circle=new DrawCircleClass(this.getGraphics());

public static void main(String []args){
new SquareCircle("Test");
}

public void  finalize() throws InterruptedException{
circle.interrupt();
circle.join();
}
}class DrawCircleClass extends Thread{
private final Graphics g;

public DrawCircleClass(Graphics g){
this.g=g;
}
public void run(){
drawCircle();
}

public void drawCircle(){
g.setColor(Color.red);
Random r=new Random();
int t1=r.nextInt(200);
int t2=r.nextInt(200);
int t3=r.nextInt(200);
synchronized(g){
g.drawArc(t2, t3, t1, t1, 0, 360);
try{
Thread.sleep(100);
}catch(Exception ee){}
}
}
}
可是现在的结果是,每次新画的图都是累积起来的,并没有把以前的图给清掉.请问我该怎么做?

解决方案 »

  1.   

    public void run(){
    drawCircle();
    }
    你这个也只画一边就结束了 
    onpaint 这个方法你打算干什么用?
      

  2.   

    public static void main(String []args){
    new SquareCircle("Test");
    }
    这里写错了,应该是new Circle("Test");
    另外,在onpaint最下面我原程序里是加了repaint()的.这里漏掉了.
      

  3.   

    你得在你的drawCircle()方法里调用JFrame的repaint()吧?
    否则,根本没有执行清除操作啊,你的invalidate()只是在onpaint()调用了一次.