Anzitutto io invertirei la condizione nel if: sposterei il controllo sulla variabile NUM_Giocatori, all'inizio, in modo tale che, se risulta falsa, il seguente controllo non viene fatto e l'istruzione if termina immediatamente.

L'eccezione viene sollevata perchè crei un array di oggetti Giocatore, ma non crei nessun oggetto Giocatore: lasci l'array vuoto e tenti di avviare ciascuno dei suoi componenti!

codice:
for (int id=0; id<NUM_Giocatori; id++) {
   arrayGiocatori[id] = new Giocatore(...);
   arrayGiocatori[id].start();
}
Ad occhio il resto codice sembra corretto...

PS: Quando richiami System.out.println() è inutile inserire un ritorno a capo nella stringa da inserire... quell' ln indica, infatti, che il ritorno a capo avviene automaticamente!


Ciao.