计时器在满足条件时给出错误

Timer giving error on meeting conditions

好的伙计们,我遇到了一个新问题,我制作了一个计时器,每秒检查一个按钮是否满足某些要求,我知道这不是最好的方法,但我不会长期使用这个程序,所以我只是想让它工作。

我遇到的问题是计时器给我以下错误:

Exception in thread "Timer-0" java.lang.NullPointerException
    at proyecto.Diseños$RemindTask.run(Diseños.java:3561)
    at java.util.TimerThread.mainLoop(Timer.java:555)
    at java.util.TimerThread.run(Timer.java:505)

第 3561 行是:

if(Boton61.getBackground() == Color.red && Boton51.getBackground() == Color.red && Boton41.getBackground() == Color.red && Boton31.getBackground() == Color.red 
                && colores.colorjugador[0] == 1) System.out.println("El jugador ha ganado !");

完整代码为:

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package proyecto;


import java.awt.Color;
import java.awt.Component;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JComponent;
import static proyecto.Proyecto.turnosjugador1;
import static proyecto.Proyecto.turnosjugador2;

import java.util.Timer;
import java.util.TimerTask;




/**
 *
 * @author Cristian
 *
 * */






public class Diseños extends JComponent implements ActionListener {

   JButton Boton1, Boton2, Boton3, Boton4, Boton5, Boton6, Boton7;

   JButton Boton11,Boton21,Boton31,Boton41,Boton51,Boton61;
   JButton Boton12,Boton22,Boton32,Boton42,Boton52,Boton62;
   JButton Boton13,Boton23,Boton33,Boton43,Boton53,Boton63;
   JButton Boton14,Boton24,Boton34,Boton44,Boton54,Boton64;
   JButton Boton15,Boton25,Boton35,Boton45,Boton55,Boton65;
   JButton Boton16,Boton26,Boton36,Boton46,Boton56,Boton66;
   JButton Boton17,Boton27,Boton37,Boton47,Boton57,Boton67;




  public Diseños()
  {

        Timer timer;
        timer = new Timer();
        timer.schedule(new RemindTask(), 0, //initial delay
        1 * 1000);

   Boton1=new JButton("lol"); 
    Boton1.setBounds(90, 410, 30, 30); 
    Boton1.setBackground(Color.black);
    Component agregar1 = add(Boton1);
    Boton1.addActionListener(this);

    Boton2=new JButton("lol"); 
    Boton2.setBounds(150, 410, 30, 30); 
    Boton2.setBackground(Color.black);
    Component agregar2 = add(Boton2);
    Boton2.addActionListener(this);

    Boton3=new JButton("lol"); 
    Boton3.setBounds(210, 410, 30, 30); 
    Boton3.setBackground(Color.black);
    Component agregar3 = add(Boton3);
    Boton3.addActionListener(this);

    Boton4=new JButton("lol"); 
    Boton4.setBounds(270, 410, 30, 30); 
    Boton4.setBackground(Color.black);
    Component agregar4 = add(Boton4);
    Boton4.addActionListener(this);

    Boton5=new JButton("lol"); 
    Boton5.setBounds(330, 410, 30, 30); 
    Boton5.setBackground(Color.black);
    Component agregar5 = add(Boton5);
    Boton5.addActionListener(this);

    Boton6=new JButton("lol"); 
    Boton6.setBounds(390, 410, 30, 30); 
    Boton6.setBackground(Color.black);
    Component agregar6 = add(Boton6);
    Boton6.addActionListener(this);

    Boton7=new JButton("lol"); 
    Boton7.setBounds(450, 410, 30, 30); 
    Boton7.setBackground(Color.black);
    Component agregar7 = add(Boton7);
    Boton7.addActionListener(this);


    Boton11=new JButton(""); 
    Boton11.setBounds(85, 10, 40, 60); 
    Boton11.setBackground(Color.white);
    Component agregar11 = add(Boton11);
    Boton11.addActionListener(this);

    Boton21=new JButton(""); 
    Boton21.setBounds(85, 70, 40, 60); 
    Boton21.setBackground(Color.white);
    Component agregar21 = add(Boton21);
    Boton21.addActionListener(this);

    Boton31=new JButton(""); 
    Boton31.setBounds(85, 130, 40, 60); 
    Boton31.setBackground(Color.white);
    Component agregar31 = add(Boton31);
    Boton31.addActionListener(this);

    Boton41=new JButton(""); 
    Boton41.setBounds(85, 190, 40, 60); 
    Boton41.setBackground(Color.white);
    Component agregar41 = add(Boton41);
    Boton41.addActionListener(this);

    Boton51=new JButton(""); 
    Boton51.setBounds(85, 250, 40, 60); 
    Boton51.setBackground(Color.white);
    Component agregar51 = add(Boton51);
    Boton51.addActionListener(this);

    Boton61=new JButton(""); 
    Boton61.setBounds(85, 310, 40, 60); 
    Boton61.setBackground(Color.white);
    Component agregar61 = add(Boton61);
    Boton61.addActionListener(this);


    Boton12=new JButton(""); 
    Boton12.setBounds(145, 10, 40, 60); 
    Boton12.setBackground(Color.white);
    Component agregar12 = add(Boton12);
    Boton12.addActionListener(this);

    Boton22=new JButton(""); 
    Boton22.setBounds(145, 70, 40, 60); 
    Boton22.setBackground(Color.white);
    Component agregar22 = add(Boton22);
    Boton22.addActionListener(this);

    Boton32=new JButton(""); 
    Boton32.setBounds(145, 130, 40, 60); 
    Boton32.setBackground(Color.white);
    Component agregar32 = add(Boton32);
    Boton32.addActionListener(this);

    Boton42=new JButton(""); 
    Boton42.setBounds(145, 190, 40, 60); 
    Boton42.setBackground(Color.white);
    Component agregar42 = add(Boton42);
    Boton42.addActionListener(this);

    Boton52=new JButton(""); 
    Boton52.setBounds(145, 250, 40, 60); 
    Boton52.setBackground(Color.white);
    Component agregar52 = add(Boton52);
    Boton52.addActionListener(this);

    Boton62=new JButton(""); 
    Boton62.setBounds(145, 310, 40, 60); 
    Boton62.setBackground(Color.white);
    Component agregar62 = add(Boton62);
    Boton62.addActionListener(this);

    Boton13=new JButton(""); 
    Boton13.setBounds(205, 10, 40, 60); 
    Boton13.setBackground(Color.white);
    Component agregar13 = add(Boton13);
    Boton13.addActionListener(this);

    Boton23=new JButton(""); 
    Boton23.setBounds(205, 70, 40, 60); 
    Boton23.setBackground(Color.white);
    Component agregar23 = add(Boton23);
    Boton23.addActionListener(this);

    Boton33=new JButton(""); 
    Boton33.setBounds(205, 130, 40, 60); 
    Boton33.setBackground(Color.white);
    Component agregar33 = add(Boton33);
    Boton33.addActionListener(this);

    Boton43=new JButton(""); 
    Boton43.setBounds(205, 190, 40, 60); 
    Boton43.setBackground(Color.white);
    Component agregar43 = add(Boton43);
    Boton43.addActionListener(this);

    Boton53=new JButton(""); 
    Boton53.setBounds(205, 250, 40, 60); 
    Boton53.setBackground(Color.white);
    Component agregar53 = add(Boton53);
    Boton53.addActionListener(this);

    Boton63=new JButton(""); 
    Boton63.setBounds(205, 310, 40, 60); 
    Boton63.setBackground(Color.white);
    Component agregar63 = add(Boton63);
    Boton63.addActionListener(this);

    Boton14=new JButton(""); 
    Boton14.setBounds(265, 10, 40, 60); 
    Boton14.setBackground(Color.white);
    Component agregar14 = add(Boton14);
    Boton14.addActionListener(this);

    Boton24=new JButton(""); 
    Boton24.setBounds(265, 70, 40, 60); 
    Boton24.setBackground(Color.white);
    Component agregar24 = add(Boton24);
    Boton24.addActionListener(this);

    Boton34=new JButton(""); 
    Boton34.setBounds(265, 130, 40, 60); 
    Boton34.setBackground(Color.white);
    Component agregar34 = add(Boton34);
    Boton34.addActionListener(this);

    Boton44=new JButton(""); 
    Boton44.setBounds(265, 190, 40, 60); 
    Boton44.setBackground(Color.white);
    Component agregar44 = add(Boton44);
    Boton44.addActionListener(this);

    Boton54=new JButton(""); 
    Boton54.setBounds(265, 250, 40, 60); 
    Boton54.setBackground(Color.white);
    Component agregar54 = add(Boton54);
    Boton54.addActionListener(this);

    Boton64=new JButton(""); 
    Boton64.setBounds(265, 310, 40, 60); 
    Boton64.setBackground(Color.white);
    Component agregar64 = add(Boton64);
    Boton64.addActionListener(this);

    Boton15=new JButton(""); 
    Boton15.setBounds(325, 10, 40, 60); 
    Boton15.setBackground(Color.white);
    Component agregar15 = add(Boton15);
    Boton15.addActionListener(this);

    Boton25=new JButton(""); 
    Boton25.setBounds(325, 70, 40, 60); 
    Boton25.setBackground(Color.white);
    Component agregar25 = add(Boton25);
    Boton25.addActionListener(this);

    Boton35=new JButton(""); 
    Boton35.setBounds(325, 130, 40, 60); 
    Boton35.setBackground(Color.white);
    Component agregar35 = add(Boton35);
    Boton35.addActionListener(this);

    Boton45=new JButton(""); 
    Boton45.setBounds(325, 190, 40, 60); 
    Boton45.setBackground(Color.white);
    Component agregar45 = add(Boton45);
    Boton45.addActionListener(this);

    Boton55=new JButton(""); 
    Boton55.setBounds(325, 250, 40, 60); 
    Boton55.setBackground(Color.white);
    Component agregar55 = add(Boton55);
    Boton55.addActionListener(this);

    Boton65=new JButton(""); 
    Boton65.setBounds(325, 310, 40, 60); 
    Boton65.setBackground(Color.white);
    Component agregar65 = add(Boton65);
    Boton65.addActionListener(this);

    Boton16=new JButton(""); 
    Boton16.setBounds(385, 10, 40, 60); 
    Boton16.setBackground(Color.white);
    Component agregar16 = add(Boton16);
    Boton16.addActionListener(this);

    Boton26=new JButton(""); 
    Boton26.setBounds(385, 70, 40, 60); 
    Boton26.setBackground(Color.white);
    Component agregar26 = add(Boton26);
    Boton26.addActionListener(this);

    Boton36=new JButton(""); 
    Boton36.setBounds(385, 130, 40, 60); 
    Boton36.setBackground(Color.white);
    Component agregar36 = add(Boton36);
    Boton36.addActionListener(this);

    Boton46=new JButton(""); 
    Boton46.setBounds(385, 190, 40, 60); 
    Boton46.setBackground(Color.white);
    Component agregar46 = add(Boton46);
    Boton46.addActionListener(this);

    Boton56=new JButton(""); 
    Boton56.setBounds(385, 250, 40, 60); 
    Boton56.setBackground(Color.white);
    Component agregar56 = add(Boton56);
    Boton56.addActionListener(this);

    Boton66=new JButton(""); 
    Boton66.setBounds(385, 310, 40, 60); 
    Boton66.setBackground(Color.white);
    Component agregar66 = add(Boton66);
    Boton66.addActionListener(this);

    Boton17=new JButton(""); 
    Boton17.setBounds(445, 10, 40, 60); 
    Boton17.setBackground(Color.white);
    Component agregar17 = add(Boton17);
    Boton17.addActionListener(this);

    Boton27=new JButton(""); 
    Boton27.setBounds(445, 70, 40, 60); 
    Boton27.setBackground(Color.white);
    Component agregar27 = add(Boton27);
    Boton27.addActionListener(this);

    Boton37=new JButton(""); 
    Boton37.setBounds(445, 130, 40, 60); 
    Boton37.setBackground(Color.white);
    Component agregar37 = add(Boton37);
    Boton37.addActionListener(this);

    Boton47=new JButton(""); 
    Boton47.setBounds(445, 190, 40, 60); 
    Boton47.setBackground(Color.white);
    Component agregar47 = add(Boton47);
    Boton47.addActionListener(this);

    Boton57=new JButton(""); 
    Boton57.setBounds(445, 250, 40, 60); 
    Boton57.setBackground(Color.white);
    Component agregar57 = add(Boton57);
    Boton57.addActionListener(this);

    Boton67=new JButton(""); 
    Boton67.setBounds(445, 310, 40, 60); 
    Boton67.setBackground(Color.white);
    Component agregar67 = add(Boton67);
    Boton67.addActionListener(this);   



  }

   @Override
  public void paintComponent(Graphics g) {    



    super.paintComponent(g);
    g.drawRect (570, 10, 300, 200);
    g.setColor(Color.BLACK);
    g.fillRect(570, 10, 300, 200);
    g.drawRect (570, 250, 300, 200);
    g.setColor(Color.BLACK);
    g.fillRect(570, 250, 300, 200);
    g.setColor(Color.WHITE);
    Font oldFont=getFont();
    Font fuente=new Font("Primer Jugador", Font.BOLD, 14);
    g.setFont(fuente);
    g.drawString("Primer Jugador", 580, 30);
    Font titulo=new Font("Segundo Jugador", Font.BOLD, 14);
    g.setFont(titulo);
    g.drawString("Segundo Jugador", 580, 270);
    g.drawString("[ " + Proyecto.primernombre + " ]", 580, 50);
    g.drawString("[ " + Proyecto.segundonombre + " ]", 580, 290);
    g.setColor(Color.CYAN);
    g.fillRoundRect(10, 5, 550, 450, 50, 50);
    g.drawString("Turno Numero : " + turnosjugador1, 580, 70);
    g.drawString("Turno Numero : " + turnosjugador2, 580, 310);


  }











    }


class RemindTask extends TimerTask {


    @Override
    public void run() {

        if(Boton61.getBackground() == Color.red && Boton51.getBackground() == Color.red && Boton41.getBackground() == Color.red && Boton31.getBackground() == Color.red 
                && colores.colorjugador[0] == 1) System.out.println("El jugador ha ganado !");

        //timer.cancel(); //Not necessary because we call System.exit    




    }
  }



}

我知道很多行都是不必要的浪费 space 并且程序可以通过循环来缩短,但我需要让它尽可能简单以便其他学生理解它。

我只是想知道为什么在定时器上使用那个 IF 时定时器会给我这样的错误,非常感谢任何建议。

很可能是在初始化class时定时器已经执行了...如果你看一下JavaDocsdelay参数是

delay - delay in milliseconds before task is to be executed.

这意味着它可能几乎立即执行,这意味着您所依赖的一些实例字段尚未初始化。

在处理 Swing UI 时,通常最好使用 javax.swing.Timer,因为它在事件调度线程的上下文中调用它 ActionListener,从而降低了风险像你一样的竞争条件。

简单地将 ActionListener 附加到按钮并在单击它们时检查状态也会更好,但这只是我的意见