Quell'errore accade perchè succede questo (guarda il tuo metodo main):

1) Viene creato il pannello
2) Il pannello viene aggiunto al JFrame
3) Il JFrame viene reso visibile
4) Parte il thread


Ora, il metodo crea() (che è il posto in cui vengono istanziati gli elementi dell'array) viene richiamato dal thread (che viene avviato al punto 4)

Il punto 3, però, richiede al pannello di disegnarsi... questo fa richiamare il paintComponent()... e questo cerca di disegnare gli oggetti dell'array "cerchio"... e l'array cerchio non contiene ancora nulla (il metodo crea() verrà chiamato solo dopo).

Devi rivedere questo passaggio: il metodo paintComponent() dovrebbe PRIMA assicurarsi che l'array sia stato riempito e solo se questa condizione viene verificata, passare al disegno dei suoi componenti.

Per far questo, sposta l'istanziazione dell'array dentro al metodo crea() e fai un banale controllo nel metodo paintComponent():


codice:
public class creaOggetti ... {
   // Questa riga va modificata
   // Oggetto[] cerchio = new Oggetto[MAX_OGGETTI];

   // ... in questo modo
   Oggetto[] cerchio = null;

   ...

   public void crea() {
      // Creo QUI l'array
      cerchio = new Oggetto[MAX_OGGETTI];
      ...   // tutto il resto come prima
   }

   ...

   @Override
   public void paintComponent(Graphics g) {
      super.paintComponent( g );
      if (cerchio != null) {
         ...   // Tutto il resto come prima...
      }
   }
}

Ciao.