What does SwingUtilities.invokeLater do?
awt, event-dispatch-thread, java, multithreading, swing
Solution
As other answers have said, it executes your `Runnable` on the AWT event-dispatching thread. But why would you want to do that? Because the Swing data structures aren't thread-safe, so to provide programmers with an easily-achievable way of preventing concurrent access to them, the Swing designers laid down the rule that all code that accesses them must run on the same thread. That happens automatically for event-handling and display maintenance code, but if you've initiated a long-running action - on a new thread, of course - how can you signal its progress or completion? You have to modify a Swing control, and you have to do it from the event-dispatching thread. Hence `invokeLater`.
Problem
What does `SwingUtilities.invokeLater` do? Is it just delaying the execution of a block of codes inside its `run` method? What is the difference between calling an action within the `invokeLater` function or simply calling it at the end of the thread we want to be executed? Can anyone help me with what really does the `invokeLater` function do?