Article View: es.comp.lenguajes.java
Article #235Re: duda sobre Timer
From: 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 ---
Technical Details
Message-ID:
<iqeur6$1ts6$1@adenine.netfront.net>Path:
arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!news.glorb.com!news.netfront.net!not-for-mailReferences:
<iqegt0$2ol$1@speranza.aioe.org>Show Full Headers
Complete Article Headers
X-Google-Thread: 1116f3,6bc93605bd33fd93 X-Google-NewGroupId: yes X-Google-Attributes: gidecded77573,domainid0,public,usenet X-Google-Language: SPANISH,ASCII Path: arc1-ca.pugleaf.net!g2news1.google.com!news1.google.com!news.glorb.com!news.netfront.net!not-for-mail From: Ricardo Palomares Martínez <rpm.PUBLI@iespana.es> Newsgroups: es.comp.lenguajes.java Subject: Re: duda sobre Timer Date: Wed, 11 May 2011 23:24:52 +0200 Organization: Netfront http://www.netfront.net/ Lines: 76 Message-ID: <iqeur6$1ts6$1@adenine.netfront.net> References: <iqegt0$2ol$1@speranza.aioe.org> NNTP-Posting-Host: 87.222.68.215 Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-15 Content-Transfer-Encoding: quoted-printable X-Trace: adenine.netfront.net 1305149095 63366 87.222.68.215 (11 May 2011 21:24:55 GMT) X-Complaints-To: news@netfront.net NNTP-Posting-Date: Wed, 11 May 2011 21:24:55 +0000 (UTC) User-Agent: Mozilla/5.0 (X11; Linux i686; rv:2.0pre) Gecko/20110408 Firefox/4.0pre SeaMonkey/2.1b3 In-Reply-To: <iqegt0$2ol$1@speranza.aioe.org>