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;
}