2012-04-11 8 views
3

Meine Swing-App hat ein Hauptfenster mit Sever-Buttons. Dieser JFrame wird im EDT gestartet ...Sollte ein JFrame immer im EDT gestartet werden

EventQueue.invokeLater(new Runnable() { 
     public void run() { 
      JFrame server = new JFrame(); 
      server.setVisible(true); 
      server.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); 

          //Do other stuff here 
     } 
    }); 

Mit jeder Taste kann ein separater JFrame gestartet werden.

Ich bin nicht sicher, ob ich einen neuen EDT-Thread starten muss, um jedes dieser neuen Fenster zu starten? Danke.

+0

möglich Duplikat sein [Warum machen die Leute laufen Java GUIs auf der Ereignis-Queue] (http://stackoverflow.com/questions/3018165/why- do-people-run-java-guis-on-the-event-queue) – Anonymous

+0

Nein. Kein Duplikat, lies bitte meine Frage sorgfältig und vollständig, nicht nur den Titel. – sachinrahulsourav

+0

* "Jeder Button kann einen separaten JFrame starten." * (Shudder) Siehe [Die Verwendung mehrerer JFrames, gute/schlechte Praxis?] (Http://stackoverflow.com/a/9554657/418556) –

Antwort

4

In der Regel, wenn Sie in einem Button-Handler (dh actionlistener) sind, ist es der EDT, der dies aufruft. Sie können diese mit SwingUtilities.isEventDispatchThread überprüfen

3

Es gibt kein Problem - jeder Action-Handler auf der EDT laufen. Also, wenn Sie neue JFrame von diesem Ort öffnen, wird es kein Problem geben.

Wenn Sie etwas Arbeit (z. B. Berechnungen) in einem anderen Thread, dann ist es in Ordnung, aber alle Arbeiten, die UI berührt müssen auf der EDT getan werden. Deshalb haben wir SwingWorker und invokeLater.

2

meine Antworten sind

in InitialThread erstellt werden einen neuen Container für die Erstellung sollte getan werden sollte

aber

  • nicht, können Sie JFrame mit seinen Inhalten bereiten vor, aber für EDT gibt es zwei die meisten impotant Methoden,

    1. JFrame#pack() // finalize & calculate used LayoutManager

    2. JFrame#setVisible(true) // display Container on the screen

  • Each button can launch a separate JFrame. don‘ t tu das, benutze stattdessen CardLayout, um zwischen den Ansichten zu wechseln, wenn du Popup w brauchst indow dann erstellen nur eine JFrame und ein weiterer Container könnte JDialog nur

Verwandte Themen