/ Forside / Teknologi / Udvikling / Java / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Java
#NavnPoint
molokyle 3688
Klaudi 855
strarup 740
Forvirret 660
gøgeungen 500
Teil 373
Stouenberg 360
vnc 360
pmbruun 341
10  mccracken 320
repaint() som hænger
Fra : Kasper Kau


Dato : 14-03-02 10:05

Et kald til repaint() returnerer med det samme og bevirker at GUI'en MÅSKE
opdaterer sig selv. Hvordan kan man få repaint() metoden til "at hænge"
indtil et update() job rent faktisk er blevet udført? Nogen som kender
artikler om dette eller selv har et dybdegående forslag til en løsning?

Mvh KK



 
 
Brian Matzon (14-03-2002)
Kommentar
Fra : Brian Matzon


Dato : 14-03-02 11:29

"Kasper Kau" <kasper@kau.dk> wrote in message
news:a6pp4d$b6d$1@sunsite.dk...
> Et kald til repaint() returnerer med det samme og bevirker at GUI'en MÅSKE
> opdaterer sig selv. Hvordan kan man få repaint() metoden til "at hænge"
> indtil et update() job rent faktisk er blevet udført? Nogen som kender
> artikler om dette eller selv har et dybdegående forslag til en løsning?

Du kan synkronisere på et eller andet object som du notifyer på senere i din
paint metode.
Det kræver selvfølgelig at det er en anden tråd end event tråden der kalder
wait...

Alternativt kan du repainte ved at gøre sådan hed:
Graphics g = getGraphics();
paint(g);
g.dispose();

/Brian Matzon





Flemming Jensen (14-03-2002)
Kommentar
Fra : Flemming Jensen


Dato : 14-03-02 20:11

On Thu, 14 Mar 2002 10:05:17 +0100, "Kasper Kau" <kasper@kau.dk>
wrote:

>Et kald til repaint() returnerer med det samme og bevirker at GUI'en MÅSKE
>opdaterer sig selv. Hvordan kan man få repaint() metoden til "at hænge"
>indtil et update() job rent faktisk er blevet udført? Nogen som kender
>artikler om dette eller selv har et dybdegående forslag til en løsning?

Du skal ind og bruge SwingUtilities.invokeAndWait(...). I
dokumentationen om API'en (den der følger med J2SDK) kan du se et
eksempel på hvordan den anvendes.

Eksemplet går ikke direkte på Swing, men der er en link til en side
der rimelig detaljeret forklare problematikken omkring flere tråde
og Swing - det grundlæggende problem er som bekendt at den tråd der
foretager den egentlige opdatering af GUI'en (tegner den) kører med
lavere prioritet, og derfor udsultes hvis der er rift om CPU'en.


/Flemming Jensen


Flemming Jensen (14-03-2002)
Kommentar
Fra : Flemming Jensen


Dato : 14-03-02 20:47

On Thu, 14 Mar 2002 19:10:57 GMT, nospam@nospam.com (Flemming Jensen)
wrote:

>On Thu, 14 Mar 2002 10:05:17 +0100, "Kasper Kau" <kasper@kau.dk>
>wrote:
>
>>Et kald til repaint() returnerer med det samme og bevirker at GUI'en MÅSKE
>>opdaterer sig selv. Hvordan kan man få repaint() metoden til "at hænge"
>>indtil et update() job rent faktisk er blevet udført? Nogen som kender
>>artikler om dette eller selv har et dybdegående forslag til en løsning?
>
>Du skal ind og bruge SwingUtilities.invokeAndWait(...). I
>dokumentationen om API'en (den der følger med J2SDK) kan du se et
>eksempel på hvordan den anvendes.
>
>Eksemplet går ikke direkte på Swing, men der er en link til en side
>der rimelig detaljeret forklare problematikken omkring flere tråde
>og Swing - det grundlæggende problem er som bekendt at den tråd der
>foretager den egentlige opdatering af GUI'en (tegner den) kører med
>lavere prioritet, og derfor udsultes hvis der er rift om CPU'en.

Jeg kom til at tænke på at jeg har et eksempel, hvor jeg bruger
SwingUtilities.invokeAndWait(...); hvor jeg laver en klasse til
at indkapsle problemet med tvungen opdatering: GUI_Updater.

Du kan finde det i DocJava (http://nostromo.ikasths.dk/docjava)

Gå ind under:

Multiprogrammering->Tråde

og gå ned i bunden. Der er en link til thread_monitor.zip, der
indeholder eksemplet.

BTW: Det er et _gammelt_ eksempel, så der er nok ting jeg ville
lave anderledes i dag, men jeg var lige inde og se på
GUI_Updater.java, og den ser rimelig okay ud.


/Flemming Jensen


Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408926
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste