Forse ho finalmente trovato la soluzione poco dopo aver postato la mia domanda.

L´approccio che ho descritto é usato spesso in GUI applications perché le classi Swing e AWt non sono Thread Safe. Esse dovrebbero essere constructed e manipolate sul EventDispatchThread (EDT). Con l´approccio descritto nel codice che ho riportato, ho che sicuramente la GUI é costruita nell´EDT.

La Java´s GUI é fortemente single Threaded e tutte le cose correlate alle Java GUI dovrebbero andare sempre attraverso un singolo thread che nel nostro caso é "AWT-EventQueue-0".

Per piccoli programmi queste cose possono anche essere evitate, ma una buona programmazione consiste nel tenere in considerazione questi fattori perché si potrebbe andare in deadlock.

Se leggiamo la documentazione per: EventQueue.invokeLater, troveremo:
Causes runnable to have its run method called in the dispatch thread of the system EventQueue. This will happen after all pending events are processed.

Spero che questo sia utile a qualcun altro e che non ho scritto stupidaggini.

Sono aperto a consigli e ulteriori spiegazioni naturalmente!