EDT is the same as AWT. All UI events in AWT are scheduled on a single thread called EDT. Basically is the thread used to process UI related events in Swing.
When you InvokeAndWait from the EDT, you basically invoke a task and then wait for it to be completed on the same thread . This will result in a deadlock. Your method will never return cuz you are waiting for the task and the task will never run because your method will never return. InvokeLater from the EDT works because you are not waiting for the task to be completed.