2013-04-28 3 views
1

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

JButton btnDealCards = new JButton("Deal Cards"); 
    btnDealCards.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent e) { 
      displayYourHand.setText(""); 
      output = ""; 
      couples = 0; 
      for (int i = 0; i < hand.length; i++) { 
       Card1 dealt = dealHand(); 
       if (dealt != null) { 
        hand[i] = dealt; 
        displayYourHand.setText(displayYourHand.getText() 
          + hand[i].toString() + "\n"); 
       } else { 
        displayYourHand.setText("NOT ENOUGH CARDS TO DEAL"); 
        status.setText("Shuffle cards to continue"); 
        return; 
       } 
      } 
      // totalHand(); 
      // pairs(); 
      // twoPair(); 
      // threeOfAKind(); 
     } 
    }); 
    btnDealCards.setBounds(336, 192, 98, 26); 
    contentPane.add(btnDealCards); 

    JButton btnShuffleCards = new JButton("Shuffle Cards"); 
    btnShuffleCards.addActionListener(new ActionListener() { 
     public void actionPerformed(ActionEvent arg0) { 
      shuffle(); 
      displayYourHand.setText("The Deck Has Been Shuffled"); 
     } 
    }); 
    btnShuffleCards.setBounds(314, 229, 147, 23); 
    contentPane.add(btnShuffleCards); 

} 

public void shuffle() { 

    for (int first = 0; first < deck.length; first++) { 
     int second = randomNumbers.nextInt(52); 
     Card1 temp = deck[first]; 
     deck[first] = deck[second]; 
     deck[second] = temp; 
    } 
    btnDealCards.setEnabled(true); 
} 

public Card1 dealHand() { 
    if (currentCard < deck.length) 
     return deck[currentCard++]; 
    else { 
     btnDealCards.setEnabled(false); 
     return null; 
    } 
} 

    public void pairs() { 
    for (int k = 0; k < faces.length; k++) 

     if (numbers[k] == 2) { 
      output += "" + ("Pair of " + faces[k] + "'s "); 
      couples++; 
     } 
    status.setText(output); 
} 

Первый мой ActionListener и actionperformer и следующие три являются действия Я хочу преформы, что выплюнуть nullpointers. Проблемами всегда являются строки после цикла for, такие как «status.setText (output)»; или "btnDealCards.setEnabled (true);". Я думаю, что мне нужно включить эти утверждения в возвращаемые утверждения, но это моя единственная идея. Заранее спасибо!

ответ

1

Переменные, которые разыменовываются на линиях, генерирующих исключение NullPointerException (NPE), являются нулевыми. Например, переменная состояния равна нулю, если вы получаете NPE на этой линии:

status.setText("Shuffle cards to continue"); 

и переменной displayYourHand является нуль, если эта линия бросает NPE:

displayYourHand.setText("The Deck Has Been Shuffled"); 

и аналогично btnDealCards переменная равна нуля, если эта линия бросает NPE:

btnDealCards.setEnabled(true); 

Моей ставка: вы можете быть затенение переменного повторно объявить его в конструкторе или методе инициализации при попытке создать объект, оставляя поле класса null. Ключ будет выглядеть в коде, где вы думаете, что вы инициализируете эти переменные и видите, почему вы на самом деле не инициализируете их.

+0

Что означает затенение переменной? Я попробовал инициализировать btnDealCards для null в локальном методе, а затем попытался изменить его на true/false, но я все равно получаю NPE. Есть ли что-то еще, что я должен инициализировать кнопки? – Sam

+0

@Sam: Пожалуйста, прочтите здесь [переменная тень] (http://en.wikipedia.org/wiki/Variable_shadowing). Не переустанавливайте переменную в null, чтобы попытаться решить ваш NPE - это не имеет никакого смысла. Вы должны инициализировать свои поля тем, что они должны представлять. Переменная JButton инициализируется экземпляром JButton. Пожалуйста, покажите нам как * редактировать исходное сообщение *, где, по вашему мнению, вы инициализируете переменные, которые заставляют ваш код бросать NPE. –

+0

Спасибо, на воздушной подушке, теперь я понимаю, где я объявлял переменные, неправильно вызывающие NPE, спасибо, что позволил мне задать глупые вопросы! – Sam

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