Article View: es.comp.lenguajes.java
Article #29222Re: Pintar desde fuera del metodo Paint
From: Chano G�mez
Date: Thu, 29 Jan 1998 00:00
Date: Thu, 29 Jan 1998 00:00
66 lines
2643 bytes
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-mailReferences:
<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