Ok, non avevo visto bene quel che fai nel metodo crea().
Non è sufficiente quella modifica perchè c'è dell'input utente che serve alla creazione dell'array... e l'array deve essere considerato creato solo DOPO che tutto l'input utente è terminato.

Serve una variabile booleana che controlli questa cosa.

codice:
public class creaOggetti ... {
   ...
   boolean creato = false;
   ...
   public void crea() {
      ...
      for(int i=0; i<MAX_OGGETTI; i++) {
         ...
      }

      // Nota bene: va fatto DOPO il ciclo for
      creato = true;
   }
   ...
   public void paintComponent(Graphics g) {
      super.paintComponent( g );
      if ( creato ) {
         ...   // posso usare l'array
      }
   }
}

Come ho detto anche nell'altro forum, il design non va affatto bene: bisognerebbe separare la gestione dell'input utente (che non andrebbe mai fatta in quel modo dentro ad un componente Swing) e far partire il tutto DOPO che i dati sono stati acquisiti... ma diciamo che per funzionare, così, funziona...


Ciao.