Soll die Swing-GUI-Anwendung über den Event Dispatcher oder den Hauptthread gesteuert werden?

Ich habe ein paar Bücher über Java gelesen. In allen gab es mindestens ein Kapitel, in dem die GUI-Programmierung unterrichtet wurde. In allen Fällen folgte das Erstellen einer einfachen Formularanwendung dieser Logik:

MyFrame.java

public class MyFrame extends JFrame
{
    JButton button1;

    public MyFrame()
    {
        button1 = new JButton("Click here.");
    }
}

FrameTest.java:

public class FrameTest
{
    public static void main(String[] args)
    {
        MyFrame myFrame = new MyFrame();

        myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        myFrame.setSize(600, 600);
        myFrame.setVisible(true);
    }
}

Im Grunde genommen müssen Sie JFrame nur in Unterklassen unterteilen, um ein Formular zu erstellen und die anderen Komponenten als Instanzvariablen zu deklarieren und diese Komponenten im Konstruktor zu initialisieren. Erstellen Sie anschließend eine weitere Testklasse, instanziieren Sie die Frame-Unterklasse in dieser Klasse und rufen Sie einige ihrer Methoden auf, um sie sichtbar zu machen.

Aber im Nebenläufigkeitsunterricht habe ich gelernt, dass wir einen Hauptthread haben, der main () in jeder von uns erstellten Anwendung ausführt. Soweit ich weiß, haben wir, wenn wir Swing zum Erstellen von GUI-Anwendungen verwenden, einen anderen Thread (Event Dispatcher Thread). Wenn ich mich also nicht irre, gibt es in jeder Swing-basierten GUI-Anwendung mindestens zwei Threads. Dies macht jede GUI-Anwendung multithreaded. In einigen Artikeln und Tutorials, die ich gelesen habe, heißt es, dass Swing Multithreading nicht unterstützt. Daher sollten alle GUI-Komponenten nur im Event Dispatcher-Thread erstellt und geändert werden, da sonst Thread-Interferenzen und Speicherinkonsistenzfehler auftreten können.

Selbst im einfachsten Beispiel in Wikipedia (http://en.wikipedia.org/wiki/Swing_%28Java%29), es ist wie folgt via invokeLater Methode gemacht.

Welcher Ansatz ist der wahre? Wo irre ich mich

Antworten auf die Frage(2)

Ihre Antwort auf die Frage