用于刷新帧的Java Thread问题

时间:2016-11-19 23:06:04

标签: java multithreading

我已经使用Java线程编写了弹跳球的代码。但是当球向下移动时,我无法清除它/刷新它。

import java.awt.*;

class myFrame extends Frame {
    public void paint(Graphics g) {
        try {
            for (int i = 10; i <= 400; i++) {                               
                g.drawOval(100,i+100,50,50);
                update(g);                                              
                repaint();                              
                Thread.sleep(500);              
            }
        } catch(Exception ex) {
            System.out.println(ex);
        }
    }
}

class BallTest {
    public static void main(String cp[]) {
        myFrame mf = new myFrame();
        mf.setSize(500,500);
        mf.setVisible(true);
    }
}

1 个答案:

答案 0 :(得分:0)

你不应该打电话给update()。如果你的目的是清除前一个球,那就行了:

import java.awt.*;

class myFrame
extends Frame
{
    public void paint(Graphics g)
    {
        try
        {
            for(int i=10;i<=400;i++)
            {
                g.drawOval(100,i+100,50,50);
                repaint();
                Thread.sleep(500);
                Rectangle r = getBounds();
                g.clearRect(r.x, r.y, r.width, r.height);
            }
        }
        catch(Exception ex)
        {
            System.out.println(ex);
        }
    }
}

class BallTest
{
    public static void main(String cp[])
    {
        myFrame mf = new myFrame();
        mf.setSize(500,500);
        mf.setVisible(true);
    }
}

但是,您应该设置一个调用repaint的计时器,而不是显式延迟paint()方法。