I guess it's not an infinite loop because there is no loop
Just because you don't have a loop in your code doesn't mean you didn't create a loop. Add a System.out.println(...) to the renderer code to see the loop.
There are many thrings wrong with your code and I can't explain exactly why you are getting the problem because its a combination of things.
Never, invoke the updateUI() method directly. This is invoked when the LAF is changed. You did not change the LAF.
This is not how you update data in the table. All updates should be done throught the model. The model will then notify the table that a change has been made and the table will repaint itself. So you will need to create a custom addRow(...) method in your TableModel and you will need to fire the appropriate events. Reread the Swing tutorial to see how the custom model there fire events.
Of course the easier solution is to just use the DefaultTableModel you you don't need to do this. Then your code would be something like:
Then when you want to add a row all you do is:
Finally, you will still have the looping problem, so you will need to make a change similiar to the suggestion I made in my first posting. Although you might want to use "!=" intead of "<" to handle situations when the size becomes smaller as well are larger.
Again as I mentioned in my first reply this code doesn't not belong in the renderer. Maybe
you should be adding a TableModelListener to the TableModel so you can listen for changes in the data and then reset the row height at that time.