Java Mutithreading Ball动画

时间:2017-03-29 20:04:27

标签: java multithreading

我在球类动画中的问题是球在直线上移动而留下了一条小道。我的预期输出是不应该有球的踪迹。

该代码确定球在X轴的一个方向上的移动。

public class App extends JFrame implements Runnable{

    int x=0,y=250;

    public void run() {
      for(;;) {
        try {
          repaint();
          x++;
          Thread.sleep(10);
        } catch(Exception e){}
      }
    }

    public void paint(Graphics g) { 
      g.drawOval(x,y,30,30);
    }

    public static void main(String[] args) {
        App frame= new App();
        frame.setTitle("Bounce");
        frame.setSize(400, 450);
        frame.setVisible(true);
        Thread t1 = new Thread(frame);
        t1.start();
    }
}

2 个答案:

答案 0 :(得分:0)

您错过了super.paint方法中的paint

public void paint(Graphics g) {
  super.paint(g);
  g.drawOval(x,y,30,30);
}

答案 1 :(得分:0)

这不是一个多线程问题,你永远不会“擦除”你为之前的x画出的椭圆。您的paint方法需要调用super.paint()才能清除之前的椭圆。这是here解释的,代码与您几乎完全相同,但没有您的问题!