2013-12-12 3 views
2

Я работаю над программой, которая отображает 8 пар карт лицевой стороной вниз в сетке 4 х 4, и вам нужно найти пары, чтобы выиграть.Получение нулевого указателя, не знаю почему

Я написал классы, и когда я пытаюсь запустить, я получаю исключение NullPointerException. Но я не знаю почему.

Это код, где ошибка сидит:

public Game(String s) 
{ 
    super(s); 
    JPanel cp = (JPanel)getContentPane(); 
    cp.add("North", scoreLabel); 
    surface = new JPanel(); 
    surface.setLayout(new GridLayout(4, 4)); 
    cp.add("Center", surface); 
    prepareCards(); 
    for (int x = 0; x < 16; x++) 
    { 
     Card temp = p.dealCard(); 
     System.out.println(temp); 
     temp.addMouseListener(cardHandle); 
     **surface.add(temp);** 
    } 
} 
public static void main(String args[]) 
{ 
    *Game game = new Game("TEST GAME PLEASE IGNORE");* 
    game.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
    game.setSize(600, 400); 
    game.setVisible(true); 
} 

Ошибка ниже (это не очень полезно).

Exception in thread "main" java.lang.NullPointerException 
    at java.awt.Container.addImpl(Unknown Source) 
    at java.awt.Container.add(Unknown Source) 
    at certClasses.Game.<init>(Game.java:39) 
    at certClasses.Game.main(Game.java:44) 

Линия 39 находится в двойных звездочками (** **), линия 44 находится в одиночных звездочками (* *).

Я искал ошибки и не получил ничего полезного (квесты stackoverflow закрыты, что вряд ли поможет другим, в основном). Я могу опубликовать весь код на pastebin, когда смогу; Сейчас я не дома, а пастебин заблокирован как «Личное сетевое хранилище и резервное копирование».

+0

Похоже, что вы никогда не создавали экземпляр поверхности. – Tyler

+0

Является ли 'temp' null? –

+2

Поскольку 'JPanel.add (null)' приводит к 'NullPointerException',' p.dealCard(); 'возвращает, вероятно,' null'. Вы увидите строку ** «null» ** в вашем 'System.out.println (temp);' statement. – bobbel

ответ

1

исключения нулевого указателя говорит вам, что один из ваших переменных равно нулю, и вы используете его в неподобающим образом

В основном, это происходит, когда вы пытаетесь использовать метод объекта (например):

// gives NPE if temp == null, because null does not have any methods 
temp.addMouseListener(cardHandle); 

Это также происходит при добавлении к nullsome collections, E.g. Queue (хотя some collections allow it):

// gives NPE if temp == null (also if surface == null) 
surface.add(temp); 

в Deb UG это в консоли можно напечатать значения, которые подозревают перед null исключением происходит:

// you actually have this in your code, so you should see 'null' printed 
Card temp = p.dealCard(); 
System.out.println(temp); 
// you should also print this out since surface could possibly be the null nulprit 
System.out.println(surface); 
0

Я нашел эту проблему сам. Это была ошибка «один за другим». Я пытался заполнить сетку 4 на 4, используя только 14 карт, поэтому, когда он нашел 15-ую, он получил нуль. Теперь он бежит! В основном. В любом случае, спасибо за помощь, ты указал мне в правильном направлении.

Смежные вопросы