Q:

Java: GUIs must be initialized in the EDT thread? 

I'm Jason.  I'm having a bit of a problem with the Substance look and feel (https://substance.dev.java.net/). 
My problem is more general.  I've already got my GUI written and it works fine, but when I use a Substance Look-and-feel, it requires all GUI initialization to take place in the EDT thread (Event Dispatching Thread or something). 
Right now I'm using com.sun.java.swing.plaf.windows. WindowsLookAndFeel (not sure if I spelled that right) and it doesn't require anything of this sort. 
So I put the main initialization into the EDT by calling SwingUtilities.invokeLater().  This made it work.  However, the program also spawns several other windows during its execution.  Right now I have code like:
SomeNewWindow window = new SomeNewWindow();
// ... some bs emitted
window.doStuff();

This code works fine because by the time window.doStuff() is called, it's already initialized.  But Substance requires me to do something like this:
SwingUtilities.invokeLater(new Runnable(){
public void run(){
SomeNewWindow window = new SomeNewWindow();
}});
// ... bs emitted
window.doStuff();

Here it sometimes throws a NullPointerException because window is not initialized by the time window.doStuff() is called.  I can't put window.doStuff() into the EDT thread because it usually takes several seconds to return and will hang the GUI. 
I've tried putting Thread.sleep(1000) right after I invoke the EDT thread because it's probably initialized by then.  But this seems awkward.  I simply need a way for the main thread to 'know' when the SomeNewWindow initialization has returned so it can continue on without having to worry about a NullPointerException. 
Thanks in advance. 

A:

You could switch from invokeLater to invokeAndWait, which will wait until the window is created.   It's a bit cheesy, but not as bad as putting in a sleep.