title: Moving Ball in Java
body: <p>when i run it, the repaint doesn't work. The frame opens and stays for 2000ms and then closes. else if i remove the System.exit(0); statement, it doesn't closes but the painted ball still doesn't shows up.</p>
  
  <p>BallWorld.java</p>
  
  <pre><code>import java.awt.*;
  import javax.swing.JFrame;
  
  public class BallWorld extends Frame {
  
  public static void main(String[] args) {
  
      BallWorld bw1 = new BallWorld(Color.red);
      bw1.show();
  
  
  }
  
  public static final int framewidth = 600;
  public static final int frameheight = 400;
  
  private Ball aball;
  private int counter = 0;
  
  private BallWorld(Color ballColor){
  
      setSize(framewidth,frameheight);
      setTitle("Ball World");
  
      aball = new Ball(10, 15, 5);
      aball.setColor(ballColor);
      aball.setMotion(3.0, 6.0);
  
  }
  
  
  public void paint(Graphics g){
  
      aball.paint1(g);
  
      aball.move();
  
  
      if((aball.x() &lt; 0) || (aball.x() &gt; framewidth))
  
          aball.setMotion(-aball.xMotion(), aball.yMotion());
  
      if((aball.yMotion() &lt; 0) || (aball.yMotion() &gt; frameheight))
  
          aball.setMotion(aball.xMotion(),-aball.yMotion());
  
      //redraw  the frame
  
      counter = counter + 1;
  
      if(counter &lt; 2000)
      repaint();
      else
          System.exit(0); 
  }   
  }
  </code></pre>
  
  <p>the other class is</p>
  
  <p>Ball.java</p>
  
  <pre><code>import java.awt.*;
  import java.awt.Rectangle;
  
  public class Ball {
  
  protected Rectangle location;
  protected double dx,dy;
  protected Color color;
  
  
  
  public Ball(int x,int y, int r){
  
      location =new Rectangle(x-r, y-r, 2*r, 2*r);
  
      dx=0;   //initially no motion
      dy=0;
      color = Color.blue;
  }
  
  // Setters
  public void  setColor(Color newColor){
      color = newColor;
  }
  
  public void setMotion(double new_dx, double new_dy){
      dx = new_dx;
      dy = new_dy;
  }
  
  
  //Getters
  
  public int radius(){    
      return location.width/2;
  }
  
  public int x(){
      return location.x + radius();
  }
  
  public int y(){
      return location.y + radius();
  }
  
  public double xMotion(){
      return dx;
  }
  
  public double yMotion(){    
      return dy;
  }
  
  public Rectangle region(){
      return location;
  }
  
  //Methods that change attributes of the ball
  
  public void moveTo(int x, int y){
      location.setLocation(x, y);
  }
  
  public void move(){
      location.translate((int) dx,(int) dy);
  }
  
  public void paint1(Graphics g){
  
      g.setColor(color);
      g.fillOval(location.x, location.y,location.width,location.height);
  }
  }
  </code></pre>