Q:

Why is JFrame instantiated in a different Thread

I can't understand what exactly is happening behind the scene.
If I have a main method like below, does it mean, that I have 2 threads? 
One main thread and one thread for the events like paintComponent or listeners etc? 
If so, what exactly happens in the main thread then?
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
        try {
            Ampelsteuerung frame = new Ampelsteuerung();
            frame.setVisible(true);
        } catch (Exception e) {
            e.printStackTrace();
        }
        }
    });
    }`

I deleted the EventQueue and tested it without, couldn't see any difference.

A:

If you read the description of SwingUtilities.invokeLater() you'd understand the reasons. It's all about the synchronization between AWT events and the GUI threads

This will happen after all pending AWT events have been processed.
  This method should be used when an application thread needs to update
  the GUI....If invokeLater is called from the event dispatching thread -- for example, from a JButton's ActionListener -- the doRun.run() will still be deferred until all pending events have been processed

Therefore "nothing" seems to happen if no pending event exists as in your case.

