Lidt hjælp til java, og Threading

Tags:    java thread swing

Hej Udviklere,

Jeg har siddet, og rodet lidt med et problem. Dette problem omhandler, at i programmet, har jeg 2 dele. En visuel del og en beregnings del, og jeg ville gerne have, at de køre på en sådan måde, så når beregnings delen har beregnet en del, så bliver visualiseringen opdateret. Indtil videre er det design, der er lagt ind i det på følgende måde:

Beregnings delen startes
Køre en beregning og sender beregningen til en Observer
Denne Observer, sender det så direkte videre til vores visualiserings del.

Koden for den del, hvor beregnings delen startes er her:
Fold kodeboks ind/udJava kode 


Og et eksempel på mit problem kan ses her:
http://www.youtube.com/watch?v=2rnDmpz1tzA

Håber at I har nogle idéer til, hvordan man kan opnå den ønskede funktionalitet.



5 svar postet i denne tråd vises herunder
0 indlæg har modtaget i alt 0 karma
Sorter efter stemmer Sorter efter dato
Hej Kevin

Jeg kan desværre ikke hjælpe dig, men jeg ville mere spørge af nysgerrighed om du gør brug af MVC modellen eller hvilken model bruger du?



Hej Stefan,

Ja, så vidt muligt benytter vi os af MVC modellen i java, du skal dog huske på, at det her kun er et lille udrag af koden for hele projektet, og det, kan derfor godt være lidt forvirrende, at skille Modellen View og Controller ad, når man kun får sådanne et lille udsnit :)

Jeg overvejer, lidt selv om, det kan have noget med Observer, og Observable Pattern at gøre, da det ligner, at det er der den sidder fast; men er endnu ikke noget frem til nogen konklusion endnu



Det er fint at bruge en thread til at lave ting, som tager lidt længere tid. Prøv at google på Java thread invokelater. Det er kun Event Dispatch Thread, som kan opdatere GUI'en, så derfor skal man bruge invokelater for at få en anden thread til at opdatere GUI'en.

Og ja observer pattern er måden at gøre det på.



Som Hans siger er der kun en tråd som bør opdatere GUI'en og det er den tråd som den kører i. Det er ikke trådsikkert at gøre fra hvilken som helst tråd.

En måde at gøre det på er at bruge:
SwingUtilities.invokeLater



Nu har jeg fået prøvet jeres forslag både fra Hans og Søren, ved at lade den nye tråd jeg starter benytte sig af SwingUtilities.invokeLater. Desværre var dettte uden held, så jeg begynder at tro, at det er, det der sker inden i tråden, der gør at det ikke er muligt at opdatere visuelt, samtidige med beregningerne køre.

Men, I kan da lige få en skriftelig version, så kan det være at I kan spotte noget, nemmere end jeg kan :)

Tråden, der køre beregningerne er en Observable, og har en controller, som den opdatere til. Denne controller, er også Observable, samtidige med at den er Observer. Den visuelle del, er kun Observable, og er blevet tilknyttet til Observer til controller delen.

Så, hvis man vil vise det lidt grafisk, går det altså på følgende måde.
Data Flow er fra bund til top.

Visuelle del
^
|
Historik (Kontroller)
^
|
Beregnings Tråd





t