Foros del Web » Programación para mayores de 30 ;) » Java »

[SOLUCIONADO] java.lang.NullPointerException

Estas en el tema de java.lang.NullPointerException en el foro de Java en Foros del Web. Buenos dias, a ver si alguien encuentra el error porque no me acabo de dar cuenta El error es : "Exception in thread "main" java.lang.NullPointerException ...
  #1 (permalink)  
Antiguo 21/12/2013, 03:19
 
Fecha de Ingreso: diciembre-2013
Mensajes: 3
Antigüedad: 10 años, 4 meses
Puntos: 0
java.lang.NullPointerException

Buenos dias, a ver si alguien encuentra el error porque no me acabo de dar cuenta El error es :
"Exception in thread "main" java.lang.NullPointerException
at juegosnake.Fruta.nuevaFruta(Fruta.java:24)
at juegosnake.JuegoSnake.inicializarObjetos(JuegoSnak e.java:49)
at juegosnake.JuegoSnake.<init>(JuegoSnake.java:34)
at juegosnake.JuegoSnake.main(JuegoSnake.java:22)"


La clase Snake
Cita:
package juegosnake;
// Graficos
import java.awt.*;
// Array
import java.util.ArrayList;

public class Snake {

// Declaramos el Array de puntos y las variables X e Y de direccion de la serpiente
private ArrayList<Point> cuerpo = new ArrayList<Point>();
private int snakeY = 0;
private int snakeX = 0;

// La posicion incial, constructor
public Snake() {

cuerpo.add(new Point(20,15));

}

// Acceder a el cuerpo desde fuera de la clase
public ArrayList<Point> getCuerpo() {

return cuerpo;

}

// Ir dibukando la serpiente
public void dibujandoSnake(Graphics g) {

for (int i = 0; i < cuerpo.size(); i++) {

g.setColor(Color.black);
Point p = cuerpo.get(i);
g.fillRect(p.x*20, p.y*20, 20, 20);

}

}

// Para moverla
public void moviendoSnake() {

for(int i = cuerpo.size()-1; i <0; i--) {

cuerpo.get(i).setLocation(cuerpo.get(i-1));
// Empieza desde atrás y va copiando el punto en la siguiente posicion
}
cuerpo.get(0).x += snakeX;
cuerpo.get(0).y += snakeY;
}

//Crecimiento: Añadir un nuevo punto al array
public void crecerSnake() {

cuerpo.add(new Point());

}

// Valores de X e Y segund la direccion
public void direccion(String d) {

switch(d) {

case "arriba":
snakeX = 0;
snakeY = -1;
break;
case "abajo":
snakeX = 0;
snakeY = -1;
break;
case "izquierda":
snakeX = -1;
snakeY = 0;
break;
case "derecha":
snakeX = -1;
snakeY = 0;
break;

}

}

}
La clase fruta
Cita:
package juegosnake;

import java.awt.*;
import java.util.Random;

public class Fruta {

// Variables: Un numero aleatorio y el punto que será la furta
private Random random;
private Point fruta;

// Constructor
public void Fruta() {

random = new Random();
fruta = new Point();

}

// Crear una fruta
public void nuevaFruta() {

fruta.x = random.nextInt(39);
fruta.y = random.nextInt(28) + 1;

}

// Dibujar la fruta
public void dibujarFruta(Graphics g) {

g.setColor(Color.red);
g.fillOval(fruta.x*20, fruta.y*20, 20, 20);

}

// Acceder a fruta desde fuera
public Point getFrua() {

return fruta;

}

}
La clase main
Cita:
package juegosnake;

import java.awt.*;
import java.awt.event.KeyListener;
import java.awt.event.KeyEvent;
import java.awt.image.BufferStrategy;
import javax.swing.JFrame;

public final class JuegoSnake extends JFrame implements KeyListener {

private final int ventanaWidth = 800;
private final int ventanaHeight = 600;
private Snake snake;
private Fruta fruta;
private int puntuacion;
private long goal;
private final int tiempo = 40;

// Iniciamos el juego
public static void main(String[] args) {

new JuegoSnake();
}
public JuegoSnake() {

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE );
this.setSize(ventanaWidth, ventanaHeight);
this.setResizable(false);
this.setLocation(100, 100);
this.setVisible(true);
this.createBufferStrategy(2);
this.addKeyListener(this);

inicializarObjetos();

while(true) {
juego();
stop();
}

}

// Creo la fruta y la serpiente y inicializo los puntos a 0
public void inicializarObjetos() {

snake = new Snake();
snake.crecerSnake();
fruta = new Fruta();
fruta.nuevaFruta();
puntuacion = 0;

}

// Iniciamos el juego
public void juego() {

snake.moviendoSnake();
comprobarColision();
dibujarPantalla();

}

// Creamos la pantalla
public void dibujarPantalla() {

BufferStrategy buffer = this.getBufferStrategy();
Graphics g = null;

try {

g = buffer.getDrawGraphics();
g.setColor(Color.black);
g.fillRect(0, 0, ventanaWidth, ventanaHeight);

fruta.dibujarFruta(g);
snake.dibujandoSnake(g);
mostrarPuntos(g);
} finally {

g.dispose();

}

buffer.show();
Toolkit.getDefaultToolkit().sync();

}

// Creamos la funcion que comprueba si chocamos con una fruta o paredes
private void comprobarColision() {
// Si choca con la fruta
if (snake.getCuerpo().get(0).equals(fruta.getFrua())) {

fruta.nuevaFruta();
snake.crecerSnake();
puntuacion += 10;

}
// Si choca las paredes
if (snake.getCuerpo().get(0).x < 0 || snake.getCuerpo().get(0).x > 39
|| snake.getCuerpo().get(0).y < 1 || snake.getCuerpo().get(0).y > 29) {

inicializarObjetos();
System.out.println("Has perdidos");

}
// Si choca consigo misma
if (snake.getCuerpo().get(0).equals(snake.getCuerpo() .get(0)) && snake.getCuerpo().size() > 2){

inicializarObjetos();
System.out.println("Has perdido");

}

}

// Mostrar los puntos que llevamos
public void mostrarPuntos(Graphics g) {

g.setColor(Color.WHITE);
g.setFont(new Font("Arial", Font.BOLD, 18));
g.drawString("Puntuación", 20, 50);

}

public void stop() {

goal = (System.currentTimeMillis() + tiempo);
while(System.currentTimeMillis() < goal) {

}

}

@Override
public void keyPressed(KeyEvent e) {

int tecla = e.getKeyCode();

switch (tecla) {

case KeyEvent.VK_UP:
snake.direccion("arriba");
break;
case KeyEvent.VK_DOWN:
snake.direccion("abajo");
break;
case KeyEvent.VK_LEFT:
snake.direccion("izquierda");
break;
case KeyEvent.VK_RIGHT:
snake.direccion("derecha");
break;
case KeyEvent.VK_E:
System.exit(0);

}

}

@Override
public void keyReleased(KeyEvent e) {


}

@Override
public void keyTyped(KeyEvent e) {

}
}
  #2 (permalink)  
Antiguo 21/12/2013, 04:49
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: java.lang.NullPointerException

¿Cual es exactamente la línea Fruta.java:24?

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 21/12/2013, 04:56
 
Fecha de Ingreso: diciembre-2013
Mensajes: 3
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: java.lang.NullPointerException

Fallo mio, aqui lo dejo anotado:
Exception in thread "main" java.lang.NullPointerException
at juegosnake.Fruta.nuevaFruta(Fruta.java:24)------------------------------ fruta.x = random.nextInt(39);
at juegosnake.JuegoSnake.inicializarObjetos(JuegoSnak e.java:49)------ fruta.nuevaFruta();
at juegosnake.JuegoSnake.<init>(JuegoSnake.java:34)-------------------- inicializarObjetos();
at juegosnake.JuegoSnake.main(JuegoSnake.java:22)---------------------- new JuegoSnake();

Lo pongo aqui porque no encuentro donde se edita, no uso mucho los foros xD
  #4 (permalink)  
Antiguo 21/12/2013, 07:13
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: java.lang.NullPointerException

Pues fruta es null y/o random es null.

Se supone que lo incializas en el constructor..... pero NO has puesto un constructor. Si el constructor devuelve void ( public void Fruta() { ... } ), ya no es un constructor, es un método, así que cuando ejecutas new Fruta(), no se ejecuta ese constructor.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #5 (permalink)  
Antiguo 21/12/2013, 08:40
 
Fecha de Ingreso: diciembre-2013
Mensajes: 3
Antigüedad: 10 años, 4 meses
Puntos: 0
Respuesta: java.lang.NullPointerException

Era eso! Muchas gracias, me fije en todo menos en ese detallito

p.d:Feliz Navidad!

Etiquetas: clase
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:49.