Frage

Ich habe die Substanz wurde die Integration in meine Anwendung aussehen und sich anfühlen und lief in einige Probleme in Bezug auf es ist interne EDT (Event Dispatch Thread) Prüfroutinen. Substanz absolut weigert UI-Klassen außerhalb des EDT zu konstruieren. Ich habe vielen Swing / AWT getan, und ich weiß, die meisten von den Regeln des EDT in Bezug auf. Ich benutze Swingworker, SwingUtilties.invokeLater zu Komponenten zu ändern. Ich habe immer aber, dass Komponenten könnte sein, GEBAUT außerhalb des EDT, sondern muss realisiert und < em> manipuliert am EDT. Mit anderen Worten, können Sie konstruieren und Setup Defaults im Hintergrund, aber der Anruf zu packen / setVisible muss EDT sowie alle nachfolgenden Anrufe, die Komponente zu manipulieren.

Der Grund, warum ich frage ist, dass ich ein besonders „bulligen“ Fenster habe zu konstruieren, viele Widgets, Staat und Ressourcen (viele Icons) beteiligt ist. Zuvor baute ich das Fenster auf dem Hintergrund Verfahren eines Swingworker und machte das Fenster sichtbar in der getan Methode. Sie hatte nie ein einziges Problem. Bei zu Substance Umschalten beißt die interne EDT Überprüfung mich.

Ich habe in der Lage Code Refactoring, dies zu umgehen. Ich kann auf dem EDT konstruieren, die keine gute Lösung, da die gesamte Anwendung ist blockiert. Ich kann auch noch mehr Refactoring und versuche mein Bestes, alle zusätzlichen Ressourcen außerhalb des EDT zu laden.

Verpackung so ... Ist es sicher zu konstruieren Schwingen / AWT-Widgets nicht auf dem Event Dispatch Thread?

War es hilfreich?

Lösung

So hat die Regeln im Jahr 2004 geändert -. Vor, Sie waren erlaubt, die Komponenten außerhalb des EDT zu schaffen und hatte nur in den EDT zu bewegen, sobald die Komponente war klar

Die neue Regel lautet nun:

  

Um die Möglichkeit einer Deadlock zu vermeiden,   Sie müssen extrem aufpassen, dass Schwingen   Komponenten und Modelle sind erstellt ,   geändert, und nur von der abgefragte   Event-Dispatching Thread.

dieser Blogeintrag von mir gibt mehr Informationen, einschließlich Links zu anderen verwandten Artikeln. beachten Sie, dass alle rel="noreferrer"> Beispiele offiziellen Sun neu geschrieben wurde, und ist sehr streng darüber.

historisch, ist es wahrscheinlich war die zunehmende Verfügbarkeit von Multi-Core-Computer als Desktop-Maschinen, die die Neuformulierung der Regel motivierten - Threadingprobleme wurde immer deutlicher auf dem Client-Stack, und durch auf EDT Richtlinien sehr streng zu sein viele von ihnen können von vornherein verhindert werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top