webForumDet fria alternativet

skriva till GUI från bakgrundstråd

Java

5 svar · 375 visningar · startad av peterbladh

Medlem sedan juni 2000277 inlägg
Frågan#1

Hej!

I .NET är de ju så att man måste göra en Control.Invoke för att uppdatera GUI't från en bakgrundstråd. Gör man inte det finns det risk för att konstigheter uppstår.
Är det samma sak i Java och i så fall hur gör man? Jag har provat att skriva till GUI't från en annan tråd än den som skapade det och det verkar fungera, men man vet ju aldrig...

Tack på förhand!
/peter

Medlem sedan sep. 2001961 inlägg
#2

Jodå, det går utmärkt. Kolla på Model-View-Controller på t.ex. http://www.cs.wm.edu/~noonan/java/mvc/ och http://java.sun.com/blueprints/patterns/MVC-detailed.html

Går att göra samma sak i Java som i .NET att man från Controller-objektet anropar en metod i GUI-klassen (View) som uppdaterar grafiken. Ett exempel på detta är JList i Swing. Den kan ta en modell och en controller och ha dynamiska data.

Medlem sedan juni 2000277 inlägg
#3

Hej o tack för ditt svar!

Är det nödvändigt att göra "control view" anropet?

Medlem sedan sep. 2001961 inlägg
#4

Hur menar du?? Att control-objektet anropar den eller de view-objekt som skall uppdateras är en förutsättning för att dessa skall veta att det finns ny data i modellen.

Medlem sedan juni 2000277 inlägg
#5

tja... jag försökte återgå till ursprungsfrågan: Kan man skriva till GUI tråden från en bakgrundstråd utan att problem uppstår?
/peter

Medlem sedan sep. 2001961 inlägg
#6

JA!

Man inte bara kan, man bör... Om man gör något som ska t.ex. hämta data från en databas eller skriva en fetingfil så vill man inte att GUI:t skall låsa sig. Alltså lägger man själva uppgiften i en egen tråd och när denna sedan är klar så säger den till gui:t

Hela Swing-paketet är uppbyggt med den paradigmen.

253 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
126 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)