Im Debugger wirft das Teil übrigens nach dem ersten Durchlauf (ohne Fehler) eine
Wie wird die geworfen? Kann sein dass du hier Exceptions angezeigt bekommst die zwar geworfen werden, die aber danach trotzdem in einem catch landen. Das ist dann nur eine Info vom Debugger an dich. Kann man abstellen.
Ein leeres catch ist übrigens meistens Unsinn, hier fängst du eine Exception und lässt sie ins leere laufen. Vielleicht wäre da schon die Lösung deines Problems zu finden.
Das einzige was hier auftreten könnte wäre dass Program.counter einen ungültigen Wert enthält. Den solltest du vorher prüfen, nicht einfach aufs Array zugreifen und schauen ob es knallt. Das ist unsauber.
Diese Zeilen schreien übrigens nach der Auslagerung in eine separate Methode.
- was aber n.m.E. doch eigentlich nicht dafür sorgen kann, das die WHILE abgebrochen wird, oder?
In deinem Fall nicht, denn du fängst die Exception. Demnach sollte das wirklich weiterlaufen.