2013-09-24 9 views
5

Qual è il modo migliore per avviare un'applicazione java swing? Forse c'è un altro modo per farlo.Best practice per avviare un'applicazione swing

Desidero sapere se devo utilizzare la classe SwingUtilities per avviare l'applicazione (possibilità secundo) o meno (prima possibilità).

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

}

risposta

7

Solo il secondo modo è corretto. I componenti di oscillazione devono essere creati e accessibili solo nel thread di invio dell'evento. Vedi concurrency in swing. La citazione pertinente:

Perché il thread iniziale non crea semplicemente la GUI stessa? Perché quasi tutto il codice che crea o interagisce con i componenti di Swing deve essere eseguito sul thread di invio dell'evento. Questa restrizione è discussa ulteriormente nella prossima sezione.

Quindi sì, è necessario utilizzare invokeLater().

+0

Grazie per la risposta. Il link nella tua risposta è molto utile! – Charmin

+1

@Maik prego. Quello, e il resto del tutorial swing vale davvero la pena leggere. – kiheru