🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.lenguajes.java
3 messages
3 total messages Started by Miguel Angel Wed, 11 May 2011 17:26
duda sobre Timer
#234
Author: Miguel Angel
Date: Wed, 11 May 2011 17:26
41 lines
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
#235
Author: Ricardo Palomares Martínez
Date: Wed, 11 May 2011 21:24
76 lines
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
#236
Author: Miguel Angel
Date: Fri, 13 May 2011 06:38
88 lines
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