¿Por qué usar SwingUtilities.invokeLater en el método principal?

Después de años de programación en Java siempre solía crear mimain() métodos como este:

public static void main(String[] args) 
{
    runProgram();
}

Pero recientemente estudié algunos códigos de la Web y vi esto a veces en lugar de lo habitual.main() usar arriba

public static void main(String[] args) 
{
    SwingUtilities.invokeLater(new Runnable() 
    {
        public void run() 
        {
            runProgram();
        }
    });
}

Simplemente quiero saber:

¿Por qué usar esto en lugar de lo habitual?main() camino ? No puedo ver ninguna diferencia cuando lo intento.¿Cuál es la diferencia entre estas dos formas?

Gracias por leerme y sus respuestas.

Respuestas a la pregunta(3)

Su respuesta a la pregunta