🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.lenguajes.java
Article #29222

Re: Pintar desde fuera del metodo Paint

#29222
From: Chano G�mez
Date: Thu, 29 Jan 1998 00:00
66 lines
2643 bytes
>   Si, lo que dices esta muy bien, pero he tenido la oportunidad de "destrozar" el
> codigo de una simulacion con una idea similar a la mia y la hacian como tu dices,
> creando un hilo que se encargase de la simulacion y aquello era un desastre. Habia
> una dessincronizacion entre por donde iba el Thread y por donde iba el Paint que no
> habia manera de entenderla.

�Qu� quieres decir con eso de la "desincronizaci�n"? Solo debes tener cuidado de que el
m�todo paint() no modifique datos generados por el thread de la simulaci�n. Tambi�n
estar�a bien que el acceso a dichos datos fuera a trav�s de m�todos de acceso
sincronizados, de forma que paint() siempre tuviera la versi�n m�s actualizada de los
datos. Es decir, si tienes tres variables importantes (por ejemplo: X, Y y Z) que debes
mostrar en pantalla, haz que el paint() lea los valores mediante los m�todos:

synchronized int leeX(){
    return X;
}

synchronized int leeY(){
    return Y;
}

etc...

Para modificar esos valores, puedes tener m�todos:

synchronized void escribeX(int x){
    this.x = x;
}

etc...

As� puedes tener la seguridad de que ambos hilos de ejecuci�n est�n siempre
perfectamente sincronizados.

Si el n�mero de variables que debes controlar es muy grande y quieres que �stas se
modifiquen todas de golpe (sin que los hilos se interrumpan unos a otros), puedes
sincronizar bloques de c�digo:

public void run(){
    /* c�digo de la simulaci�n */
    ...
    /* vamos a modificar el estado del objeto de forma "at�mica" (indivisible) */

    synchronized(this){
        x = ...
        y = ...
        z = ...
    }
    /* resto de la simulaci�n */..
}

public void paint(Graphics g){
    int xx,yy,zz;
    synchronized(this){
        xx = x;
        yy = y;
        zz = z;
    }
    /* Ya podemos usar los valores de xx,yy y zz
        y dibujar todo en pantalla */
    }

Un saludo.

Chano.
Technical Details
Message-ID: <34D0FC5C.D2EC35A3@ran.es>
Path: arc1-ca.pugleaf.net!unknown!not-for-mail
References: <34C88CEC.C1CE4E42@madnetro.com> <6ai9ce$k2v$1@eubuf21.eu.concert.net> <34CDA7D7.8BF2848D@lettera.skios.es> <34CE5603.A29BD644@ran.es> <34D06744.F9F0A873@lettera.skios.es>

Show Full Headers
Complete Article Headers
X-Google-Language: SPANISH,ASCII
X-Google-Thread: 1116f3,25919fe04c94ccf4
X-Google-Attributes: gid1116f3,public
From: "Chano G�mez" <chano@ran.es>
Subject: Re: Pintar desde fuera del metodo Paint
Date: 1998/01/29
Message-ID: <34D0FC5C.D2EC35A3@ran.es>
X-Deja-AN: 320405740
Content-Transfer-Encoding: 8bit
References: <34C88CEC.C1CE4E42@madnetro.com> <6ai9ce$k2v$1@eubuf21.eu.concert.net> <34CDA7D7.8BF2848D@lettera.skios.es> <34CE5603.A29BD644@ran.es> <34D06744.F9F0A873@lettera.skios.es>
Mime-Version: 1.0
Content-Type: text/plain; charset=iso-8859-1
Organization: Unisource Espana NEWS SERVER
Newsgroups: es.comp.lenguajes.java