2013-09-24 13 views
5

Jaki jest najlepszy sposób na rozpoczęcie aplikacji java java? Może jest inny sposób, aby to zrobić.Najlepsza praktyka, aby uruchomić aplikację swingową

Chcę wiedzieć, czy muszę użyć klasy SwingUtilities, aby uruchomić aplikację (druga możliwość), czy nie (pierwsza możliwość).

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(); 
     } 
    }); 
} 

}

Odpowiedz

7

Tylko drugi sposób jest poprawny. Komponenty swingowe muszą być tworzone i dostępne tylko w wątku wysyłki zdarzeń. Zobacz concurrency in swing. Odpowiednia wycena:

Dlaczego pierwszy wątek nie tworzy samego GUI? Ponieważ prawie cały kod, który tworzy lub współdziała z komponentami Swing, musi działać w wątku wysyłki zdarzeń. To ograniczenie jest omówione dalej w następnej sekcji.

Tak, musisz użyć invokeLater().

+0

Dzięki za odpowiedź. Link w twojej odpowiedzi jest bardzo pomocny! – Charmin

+1

@Maik nie ma za co. To, a reszta samouczka swingowego jest naprawdę warta przeczytania. – kiheru

Powiązane problemy