SwingWorker

Ich lese mich aktuell gerade in die Threadgeschichte mit Swing ein. Nun bin ich auf den SwingWorker gestossen, der eigentlich soweit klar ist.

Nur, wie integriere ich den in die MVC Architektur? Theoretisch müsste der im Controller ausgeführt werden oder?

Gruss und Danke

Mit „ausgeführt“ ist der Aufruf von execute() gemeint?
In den meisten Fällen ist es vermutlich sinnvoll den Worker aus dem Controller heraus zu starten. Hängt aber auch davon ab, was dieser genau erledigen soll.
Ich kann mir aber auch Szenarien vorstellen, in denen er aus dem Model heraus gestartet wird. Auch aus der View heraus wäre das denkbar und technisch möglich…

So ganz verstehe ich aber nicht worauf die Frage hinauslaufen soll…

Naja ich möchte mich korrekter weise an das MVC pattern halten. Wenn das aber nicht eine entscheidene Rolle spielt hat sich das eigentich erledigt :slight_smile:

das dürfte ein technisches Detail, vom MVC-Konzept unabhängig sein


@ headnut
da ich hier gerade schreibe (wobei ich eigentlich dachte dass mir noch mehr als eine Zeile oben einfällt, aber dann irgendwie doch nicht),
kann ich gleich hier im Posting hinweisen, durchaus auch ein wenig zur allgemeinen Verbreitung:

automatisch hinzugefügte Zeilen wie
“Sent from my …Phone using … - now Free”

sind doch einfach nur eine Zumutung, oder?
aus Respekt vor anderen sollte man seine Eingabegeräte doch soweit unter Kontrolle haben, entsprechendes vorher auszuschalten,
suche im Internet danach falls nicht bekannt

da sogar ein Link dabei ist, werde ich den gleich entfernen, aber wichtig ist dass es gar nicht erst dazu kommt

@SlaterB
Hab es rausgenommen… Danke für den Tipp.

Da es geklärt ist, vielen Dank und close

Ich würde es auf keinen Fall im Model anwenden, da dein Model dann abhängig von Swing ist, was vielleicht nicht immer ganz gewollt ist.

Ja, im Model ist vielleicht eine etwas blöde Idee. Hatte da wohl eher an einen normalen Thread gedacht, da ich SwingWorker eigentlich nicht nutze…
Aber wie gesagt ist das ganze vom MVC unabhängig. Relevant ist welcher Prozess vom Worker abgebildet wird, dementsprechend ist er in die passende Komponente einzubinden.

[QUOTE=_Michael;71759]
Aber wie gesagt ist das ganze vom MVC unabhängig. Relevant ist welcher Prozess vom Worker abgebildet wird, dementsprechend ist er in die passende Komponente einzubinden.[/QUOTE]

Ja nicht ganz, weil je nachdem wo das Model dann Änderungen erfährt, können die “ModelChangeEvents” in einem Hintergrund Thread gefeuert werden, so dass man in der UI oder Controller aufpassen muss und sich wieder richtige in den UI-Thread(EDT) synchronosiert.

Wenn ich das alles richtig verstanden habe, sollte der SwingWorker eher nicht im Model sein?

Dann würde er ModelWorker heißen müssen. :wink:

Ja genau er passt am besten in die (Swing) UI :wink:

Gut den Wink hab ich jetzt definitiv verstanden :idea:

Hehe, wie gesagt wenn du aus dem SwingWorker dein Model änderst und die Events in der View oder einer anderen View fängst, dann denk daran dass du in einem Background Thread bist und dich zum EDT synchronsieren (SwingUtillities#invokeLater) musst, bevor du die UI änderst…

Okey vielen Dank für den hinweis

Ich denke über genua diesen Fehler stolpert etwa jeder anfänger…

Danke Danke das hat sehr geholfen

Nicht nur Anfänger, hab auch schon erfahrene Entwickler erlebt, die das nicht beachtet haben.
Das Problem bei Swing ist, dass du leider keine Exception bekommst. Bei SWT wird eine Fehlermeldung geschmissen, wenn man sowas macht.

achso, nicht ganz glücklich gewählt in dem fall…

Bis jetzt hab ich solche Sachen immer in einem neuen Thread gestartet… Es erscheint mir aber schon besser mit dem SwingWorker zu arbeiten…