Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

When to use SwingUtilies.invokeAndWait/invokeLater

I read somewhere that for any thread that affects the visuals of the gui it should be ran in the EDT using SwingUtilities.invokeAndWait/invokeLater

For a basic gui, is it necessary to put something like new SwingGUI().setVisible(true); in the line of the EDT using invokeAndWait? Just to display?

Does this count?

like image 983
Sam Ismail Avatar asked Dec 31 '11 10:12

Sam Ismail


1 Answers

The short answer to your question is: yes, even calling setVisible should happen on the EDT. To find out whether the current thread is the EDT, you can use the EventQueue#isDispatchThread method

Some reference links:

  • Multithreaded Swing Applications
  • Threads and Swing
  • Concurrency in Swing

Edit: after reading the links I provided, it seems some of the articles on the Oracle site are outdated as in they still document you can create Swing components on another thread. There is a stackoverflow question on this which contains some nice answers and links to blogposts and articles about the 'new' policy (new as in a few years old)

like image 113
Robin Avatar answered Oct 19 '22 00:10

Robin