我正在运行一个程序,它运行在我创建的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,接下来的三个是我希望预先形成吐出无效点的动作。问题总是在for循环之后的行,例如“status.setText(output);”或“btnDealCards.setEnabled(true);”。我想我需要将这些语句转换为return语句,但这是我唯一的想法。提前谢谢!
答案 0 :(得分:1)
在抛出NullPointerException(NPE)的行上取消引用的变量为null。例如,如果您在此行上获得NPE,则状态变量为null:
status.setText("Shuffle cards to continue");
如果此行抛出NPE,则displayYourHand变量为null:
displayYourHand.setText("The Deck Has Been Shuffled");
同样,如果此行抛出NPE,则btnDealCards变量为null:
btnDealCards.setEnabled(true);
我敢打赌:当您尝试创建对象时,可能会通过在构造函数或init方法中重新声明变量来隐藏变量,并将类字段保留为null。关键是要查看您认为的代码,您正在初始化这些变量,并了解为什么您实际上没有初始化它们。