Thread View: es.comp.lenguajes.java
3 messages
3 total messages
Started by Miguel Angel
Wed, 11 May 2011 17:26
duda sobre Timer
Author: Miguel Angel
Date: Wed, 11 May 2011 17:26
Date: Wed, 11 May 2011 17:26
41 lines
2094 bytes
2094 bytes
Hola,
tengo una clase llamada Juego donde defino un Timer en el constructor
de la siguiente forma:
public class Juego
{
private Timer timerBajar;
private ActionListener tareaBajar;
// ............constructor
public Juego()
{
ActionListener tareaBajar = new ActionListener()
{
public void actionPerformed (ActionEvent e)
{
pieza.mueveAbajo(campoDeJuego.getTablero());
}
};
Timer timerBajar = new Timer (1000,tareaBajar);
}
//......... metodo principal
public void start()
{
campoDeJuego.ponerPieza(pieza);
campoDeJuego.dibujarTablero();
timerBajar.start();
...
}
Pues bien, si pongo el timerBajar.start(); en el constructor, funciona
correctamente, pero si la pongo donde en start (que es lo que he
copiado aqui), me da el error java.lang.NullPointerException: null
es decir como si la variable timerBajar no estuviese instanciada, pero
yo he creado una instancia en el constructor y adem�s la variable es de
la clase. �que hago mal?
Muchas gracias
Re: duda sobre Timer
Author: Ricardo Palomares Martínez
Date: Wed, 11 May 2011 21:24
Date: Wed, 11 May 2011 21:24
76 lines
3650 bytes
3650 bytes
El 11/05/11 19:26, Miguel Angel escribió:
> Hola,
>
> tengo una clase llamada Juego donde defino un Timer en el constructor
> de la siguiente forma:
>
> public class Juego
> {
> private Timer timerBajar;
> private ActionListener tareaBajar;
>
> // ............constructor
> public Juego()
> {
> ActionListener tareaBajar = new ActionListener()
> {
> public void actionPerformed (ActionEvent e)
> {
> pieza.mueveAbajo(campoDeJuego.getTablero());
> }
> };
> Timer timerBajar = new Timer (1000,tareaBajar);
> }
>
> //......... metodo principal
> public void start()
> {
> campoDeJuego.ponerPieza(pieza);
> campoDeJuego.dibujarTablero();
> timerBajar.start();
> ...
> }
>
> Pues bien, si pongo el timerBajar.start(); en el constructor, funciona
> correctamente, pero si la pongo donde en start (que es lo que he
> copiado aqui), me da el error java.lang.NullPointerException: null
>
> es decir como si la variable timerBajar no estuviese instanciada, pero
> yo he creado una instancia en el constructor y además la variable es
> de la clase. ¿que hago mal?
Por ser estrictos con la nomenclatura, las "variables" de las clases
se llaman "propiedades". No pasa nada, te he entendido, pero si te
acostumbras a llamar las cosas por el nombre comúnmente aceptado,
quedas más "pofesional". :-)
Bien, lo que sucede es que en el contrusctor no has inicializado la
propiedad timerBajar, sino una variable (esta sí es variable) local
del constructor, que resulta que se llama igual que la propiedad.
Tienes que corregir esta línea:
> Timer timerBajar = new Timer (1000,tareaBajar);
por esta:
> timerBajar = new Timer (1000,tareaBajar);
Aunque no se considera buen estilo de codificación, a mí me gusta usar
this. delante de las propiedades de una clase (y, si sirve para evitar
ambigüedades, incluso delante de los métodos). Si hubieras escrito:
> Timer this.timerBajar = new Timer (1000,tareaBajar);
el compilador te habría avisado que hay un error en esa línea y
posiblemente lo habrías detectado tú mismo. Siempre puedes escribir
"this.propiedad" para depurar y, cuando vayas a entregar el código a
alguien más, haces una búsqueda y reemplazo de "this." por "". :-)
Saludos.
--- Posted via news://freenews.netfront.net/ - Complaints to news@netfront.net ---
Re: duda sobre Timer
Author: Miguel Angel
Date: Fri, 13 May 2011 06:38
Date: Fri, 13 May 2011 06:38
88 lines
3963 bytes
3963 bytes
Muchas gracias Ricardo, ese era el problema. Se me escap� escribir el
Timer delante.
Respecto a lo de las variables, yo lo tengo visto como campos o como
variables de clase, es por eso que abreviaba llamandolas variables (lo
de campos no me gusta mucho), pero vamos, propiedades ya me est� bien.
Salu2
Miguel �ngel
Le 11/05/2011, Ricardo Palomares Mart�nez a suppos� :
> El 11/05/11 19:26, Miguel Angel escribi�:
>> Hola,
>>
>> tengo una clase llamada Juego donde defino un Timer en el constructor
>> de la siguiente forma:
>>
>> public class Juego
>> {
>> private Timer timerBajar;
>> private ActionListener tareaBajar;
>>
>> // ............constructor
>> public Juego()
>> {
>> ActionListener tareaBajar = new ActionListener()
>> {
>> public void actionPerformed (ActionEvent e)
>> {
>> pieza.mueveAbajo(campoDeJuego.getTablero());
>> }
>> };
>> Timer timerBajar = new Timer (1000,tareaBajar);
>> }
>>
>> //......... metodo principal
>> public void start()
>> {
>> campoDeJuego.ponerPieza(pieza);
>> campoDeJuego.dibujarTablero();
>> timerBajar.start();
>> ...
>> }
>>
>> Pues bien, si pongo el timerBajar.start(); en el constructor, funciona
>> correctamente, pero si la pongo donde en start (que es lo que he
>> copiado aqui), me da el error java.lang.NullPointerException: null
>>
>> es decir como si la variable timerBajar no estuviese instanciada, pero
>> yo he creado una instancia en el constructor y adem�s la variable es
>> de la clase. �que hago mal?
>
>
> Por ser estrictos con la nomenclatura, las "variables" de las clases
> se llaman "propiedades". No pasa nada, te he entendido, pero si te
> acostumbras a llamar las cosas por el nombre com�nmente aceptado,
> quedas m�s "pofesional". :-)
>
> Bien, lo que sucede es que en el contrusctor no has inicializado la
> propiedad timerBajar, sino una variable (esta s� es variable) local
> del constructor, que resulta que se llama igual que la propiedad.
> Tienes que corregir esta l�nea:
>
>> Timer timerBajar = new Timer (1000,tareaBajar);
>
> por esta:
>
>> timerBajar = new Timer (1000,tareaBajar);
>
>
> Aunque no se considera buen estilo de codificaci�n, a m� me gusta usar
> this. delante de las propiedades de una clase (y, si sirve para evitar
> ambig�edades, incluso delante de los m�todos). Si hubieras escrito:
>
>> Timer this.timerBajar = new Timer (1000,tareaBajar);
>
>
> el compilador te habr�a avisado que hay un error en esa l�nea y
> posiblemente lo habr�as detectado t� mismo. Siempre puedes escribir
> "this.propiedad" para depurar y, cuando vayas a entregar el c�digo a
> alguien m�s, haces una b�squeda y reemplazo de "this." por "". :-)
>
> Saludos.
>
>
> --- Posted via news://freenews.netfront.net/ - Complaints to
> news@netfront.net ---
Thread Navigation
This is a paginated view of messages in the thread with full content displayed inline.
Messages are displayed in chronological order, with the original post highlighted in green.
Use pagination controls to navigate through all messages in large threads.
Back to All Threads