2017-03-29 58 views
0

我在这里与球动画的问题是,球正在直线移动留下的踪迹。我预期的结果是,不应该有球的踪迹。Java多线程球动画

该代码确定球沿着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(); 
    } 
} 
+0

[绘制一个矩形,不会在下一个绘画中消失](http://stackoverflow.com/questions/12683533/drawing-a-rectangle-that-wont-disappear-in-next-paint)应该结束你的问题是什么以及如何解决它。你需要使用'paintComponent(Graphics g)'并且调用'super.paintComponent(g)'来摆脱那个“踪迹”。 – Obicere

+0

哎。一般而言,这是非常糟糕的做法。整个GUI在EDT之外运行。 –

回答

0

你错过来电super.paintpaint方法:

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

完美!它与那些神奇的线... – Prinze

0

这不是一个多线程的问题,你只是不“抹去”你画上一个X上的椭圆形。您的paint方法需要调用super.paint()以清除以前的椭圆。这是解释here与你几乎相同的代码,但没有你的问题!

+0

感谢队友它真的帮助! – Prinze