Ich habe das Programm in die Substanz in meine Anwendung zu integrieren und stieß dabei auf mehrere Probleme mit den internen EDT (Event Dispatch Thread) Prüfroutinen. Substance weigert sich absolut, UI-Klassen außerhalb des EDT zu konstruieren. Ich habe viel mit Swing/AWT gearbeitet und kenne die meisten Regeln bezüglich des EDT. Ich verwende SwingWorker, SwingUtilties.invokeLater, um Komponenten zu ändern. Ich dachte immer, Komponenten könnten KONSTRUKTURIERT außerhalb des EDT, muss aber realisiert y manipuliert auf der EDT. Mit anderen Worten: Sie können die Standardeinstellungen im Hintergrund erstellen und einrichten, aber der Aufruf von pack/setVisible muss im EDT erfolgen, ebenso wie alle nachfolgenden Aufrufe zur Bearbeitung der Komponente.
Der Grund, warum ich frage, ist, dass ich ein besonders "beefy" Fenster zu konstruieren, mit vielen Widgets, Zustand und Ressourcen (viele Symbole) haben. Bisher habe ich das Fenster in der Background-Methode eines SwingWorkers konstruiert und das Fenster in der Done-Methode sichtbar gemacht. Ich hatte nie ein einziges Problem. Beim Wechsel zu Substance beißt mich die interne EDT-Überprüfung.
Ich konnte den Code umgestalten, um dies zu umgehen. Ich kann auf dem EDT konstruieren, was keine gute Lösung ist, da die gesamte Anwendung blockiert wird. Ich kann auch refactor noch mehr und versuchen mein Bestes, um alle zusätzlichen Ressourcen außerhalb der EDT zu laden.
Zum Abschluss ... Ist es sicher zu konstruieren Swing/AWT-Widgets NICHT auf dem Event Dispatch Thread?