Ah, non avevo visto il while, allora tutto okay.
Dovresti postare il trace completo dell'eccezione per capire cosa ti succede.
Tieni conto che cmq non ho controllato la correttezza dell'algoritmo.