2011-10-03 2 views
1

Я делаю игру, и она дает мне NullPointerException, который, я считаю, означает, что переменная или то, что я пытаюсь сделать, не возвращает значение? Я использую этот код:Код Java - NullPointerException

package OurGame; 

import java.awt.Image; 
import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.util.Random; 

import javax.swing.ImageIcon; 
import javax.swing.JPanel; 
import javax.swing.Timer; 

public class Coin extends JPanel implements ActionListener { 
/** 
    * 
    */ 
    private static final long serialVersionUID = 1L; 

Image img; 

int x,y; 
Timer t; 
Random r; 

     public Coin() { 
      x = 50; 
      y = 50; 

      System.out.println("New coin created: " + x + ", " +y); 

      ImageIcon i = new ImageIcon("C:/coin.png"); 
      img = i.getImage(); 
      System.out.println(i); 

      t = new Timer(3000,this); 
      t.start(); 
     } 

     @Override 
     public void actionPerformed(ActionEvent arg0) { 
      move(); 

     } 

     public void move() { 

      setX(r.nextInt(640)); 
      setY(r.nextInt(480)); 


     } 

     public void setX(int xs) { 
      x = xs; 
     } 

     public void setY(int ys) { 
      y = ys; 
     } 
     public Image getImage(){ 
      return img; 
     } 

     public int getX(){ 
      return x; 
     } 

     public int getY() { 
      return y; 
     } 


} 

Ошибка происходит здесь:

 setX(r.nextInt(640)); 

Полная выходная ошибка ниже:

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
    at OurGame.Coin.move(Coin.java:46) 
    at OurGame.Coin.actionPerformed(Coin.java:40) 
    at javax.swing.Timer.fireActionPerformed(Unknown Source) 
    at javax.swing.Timer$DoPostEvent.run(Unknown Source) 
    at java.awt.event.InvocationEvent.dispatch(Unknown Source) 
    at java.awt.EventQueue.dispatchEvent(Unknown Source) 
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 
    at java.awt.EventDispatchThread.run(Unknown Source) 

Я не вижу никаких оснований для этого но, может быть, вы можете помочь.

Спасибо.

ответ

4

Нужно инициализировать переменную r. Проверьте конструкторы для java.util.Random, например:

Random r = new Random(); 
+0

Ahh ... whoops ^^ Начальная ошибка прямо там, спасибо. –

6

Вы используете r, не говоря уже о r = new ....

2

r равна нулю. Сначала инициализируйте его. Поместите это в свой конструктор:

r = new Random(); 
Смежные вопросы