import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Shape;
import java.awt.geom.Ellipse2D;import javax.swing.JFrame;
import javax.swing.JPanel;public class ThreadTest {
private JFrame frame;

public ThreadTest(){
frame=new JFrame("自动刷新");
GraphPanel gp=new GraphPanel();
frame.add(gp,BorderLayout.CENTER);
}

public void showMe(){
Thread t=new Thread(new GraphPanel());
t.start();
frame.setVisible(true);
frame.setSize(500,500);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
}
public static void main(String[] args) {
new ThreadTest().showMe();
}}class GraphPanel extends JPanel implements Runnable{
private int x,y;
private Color c;
private int i=0;

public void run() {
while(true){
repaint();
System.out.println("被刷新");
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void paintComponent(Graphics g){
super.paintComponent(g);
x=(int)(Math.random()*200+1);
y=(int)(Math.random()*200+1);
if(i%2==0){
c=Color.BLUE;
}else{
c=Color.RED;
}
i++;
System.out.println(x);
Graphics2D g2=(Graphics2D)g;
Shape s=new Ellipse2D.Double(x,y,55,55); 
g2.setColor(c);
g2.draw(s);
g2.fill(s);
}
}

解决方案 »

  1.   

    可能线程锁死了,帮你改了一下,这个可以了:
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Graphics;
    import java.awt.Graphics2D;
    import java.awt.Shape;
    import java.awt.geom.Ellipse2D;import javax.swing.JFrame;
    import javax.swing.JPanel;public class ThreadTest {
    private JFrame frame; public ThreadTest() {
    frame = new JFrame("自动刷新");
    GraphPanel gp = new GraphPanel();
    frame.add(gp, BorderLayout.CENTER);
    } public void showMe() {
    // Thread t = new Thread(new GraphPanel());
    // t.start();
    frame.setVisible(true);
    frame.setSize(500, 500);
    frame.setLocationRelativeTo(null);
    frame.setDefaultCloseOperation(frame.EXIT_ON_CLOSE);
    } public static void main(String[] args) {
    new ThreadTest().showMe();
    }}class GraphPanel extends JPanel {
    private int x, y;
    private Color c;
    private int i = 0; public GraphPanel() {
    (new Thread(new Delay(this))).start();
    } public void paintComponent(Graphics g) {
    super.paintComponent(g);
    x = (int) (Math.random() * 200 + 1);
    y = (int) (Math.random() * 200 + 1);
    if (i % 2 == 0) {
    c = Color.BLUE;
    } else {
    c = Color.RED;
    }
    i++;
    Graphics2D g2 = (Graphics2D) g;
    Shape s = new Ellipse2D.Double(x, y, 55, 55);
    g2.setColor(c);
    g2.draw(s);
    g2.fill(s);
    }
    }class Delay implements Runnable { private GraphPanel panel; public Delay(GraphPanel panel) {
    this.panel = panel;
    } public void run() {
    while (true) {
    panel.repaint();
    System.out.println("重绘了");
    try {
    Thread.sleep(3000);
    } catch (InterruptedException e) {
    e.printStackTrace();
    }
    } }
    }