Best practice to start a swing application

Charmin picture Charmin · Sep 24, 2013 · Viewed 7.4k times · Source

What is the best practice way to start a java swing application? Maybe there is another way to do it.

I want to know if i have to use the SwingUtilities class to start the application (secound possibility) or not (first possibility).

public class MyFrame extends JFrame {

public void createAndShowGUI() {
    this.setSize(300, 300);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    // add components and stuff
    this.setVisible(true);
}

public static void main(String[] args) {

    // First possibility
    MyFrame mf = new MyFrame();
    mf.createAndShowGUI();

    // Secound possibility
    SwingUtilities.invokeLater(new Runnable() {

        @Override
        public void run() {
            MyFrame mf = new MyFrame();
            mf.createAndShowGUI();
        }
    });
}

}

Answer

kiheru picture kiheru · Sep 24, 2013

Only the second way is correct. Swing components must be created and accessed only in the event dispatch thread. See concurrency in swing. The relevant quote:

Why does not the initial thread simply create the GUI itself? Because almost all code that creates or interacts with Swing components must run on the event dispatch thread. This restriction is discussed further in the next section.

So yes, you need to use invokeLater().