All Swing components should be created on the Event Dispatch Thread (EDT), which is why you should use the invokeLater.

99% of the time you won't have a problem, but when you do it probably will be random and you will have a hard time debugging the problem. So get in the habbit of creating Swing components properly and save yourself some grief.

Read the section from the Swing tutorial on Concurrency for more information.