0

Estoy haciendo un ejercicio, donde el objetivo es que una pelota rebote en un JFrame, después de hacer clic en el JButton dale El problema, es que el IDE me arroja una excepción de tipo NullPointerException, pero no puedo encontrar cuál es la variable que está en NULL. ERROR

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at ProyectoPelotaPractica.LaminaBotones.comienza(UsoThreads.java:130)

¿Alguien podría probarlo y ayudarme, por favor?

Este es el código:

public class UsoThreads {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Marco miMarco=new Marco();
        miMarco.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        miMarco.setVisible(true);

    }

}

class Marco extends JFrame{

    public Marco() {
        setBounds(400,300,600,400);
        setTitle("Rebota Pelota");
        LaminaPelota miLamina=new LaminaPelota();
        add(miLamina,BorderLayout.CENTER);
        LaminaBotones milamina2=new LaminaBotones();
        add(milamina2,BorderLayout.SOUTH);
    }   
}

class Pelota extends JPanel{

    private double x=10;
    private double y=10;
    private static final int TAMX=15;
    private static final int TAMY=15;
    private double speedX=1;
    private double speedY=1;

    public void mover(Rectangle2D limite) {
        x+=speedX;
        y+=speedY;

        if(x<limite.getMinX()) {
            x=limite.getMinX();
            speedX=-speedX;
        }

        if(x+TAMX>limite.getMaxX()) {
            x=limite.getMaxX()-TAMX;
            speedX=-speedX;
        }

        if(y<limite.getMinY()) {
            y=limite.getMinY();
            speedY=-speedY;
        }

        if(y+TAMY>limite.getMaxY()) {
            y=limite.getMaxY()-TAMY;
            speedY=-speedY;
        }

    }

    public Ellipse2D dibujarPelota() {
        return new Ellipse2D.Double(x,y,TAMX,TAMY);
    }

}

class LaminaPelota extends JPanel{

    private ArrayList<Pelota>arrayPelota=new ArrayList<Pelota>();

    public void agregarPelota(Pelota b) {
        arrayPelota.add(b);
    }

    public void paintComponent(Graphics g){ 
    super.paintComponent(g);
    Graphics2D g2=(Graphics2D) g; 

    for(Pelota e:arrayPelota) {
        g2.fill(e.dibujarPelota());
    }


    }

}

class LaminaBotones extends JPanel{

    public LaminaBotones() {
        JButton dale=new JButton("Dale");
        JButton salir=new JButton("Salir");
        dale.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub

                comienza();
            }

        });

        salir.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                // TODO Auto-generated method stub
                System.exit(0);
            }


        });
        add(dale);
        add(salir);
    }

    public void comienza() {
        Pelota pelota=new Pelota();
        lamina.agregarPelota(pelota);
        for(int i=1;i<=3000;i++) {
            pelota.mover(lamina.getBounds());
            lamina.paint(lamina.getGraphics());

        }
    }

    private LaminaPelota lamina;
}
DevMind
  • 5,025
  • 11
  • 29
  • 60
Gonzalo
  • 431
  • 5
  • 14
  • 1
    Hola Gonzalo, el error debe mostrar un stacktrace con los ficheros relacionados y la línea en concreto donde da el fallo. Por favor, comparte esa información también porque es esencial para limitar el alcance del problema y ayudarte de forma más sencilla. Lee [ask] para más información. – Alvaro Montoro Aug 18 '19 at 04:00
  • @Gonzalo offtopic deberias aplicar algun algoritmo para el rebote de la pelota – userStack Aug 18 '19 at 05:26
  • Es corecto, voy a mostrar el error, o excepcion! El algoritmo se encuentra x-rw! Gracias! – Gonzalo Aug 18 '19 at 20:08

1 Answers1

1

En la clase "LaminaBotones" la variable "lamina" (tipo "LaminaPelota") no está inicializada. Al hacer click en el botón "Dale" se llama al método "comienza()" donde se utiliza dicha variable. Saludos