Java 线程“AWT-EventQueue-0”中出现异常。不知道该怎么办

Java 线程“AWT-EventQueue-0”中出现异常。不知道该怎么办,java,nullpointerexception,awt-eventqueue,Java,Nullpointerexception,Awt Eventqueue,我是那个网站的新手。 最近我开始在java Blackjack上开发一个游戏,遇到了一些困难。这次我需要你的帮助 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at Game.hitPlayer(Game.java:263) at Game.deal(Game.java:235) at Game.actionPerformed(Game.java:169) at javax.swing.Abstract

我是那个网站的新手。 最近我开始在java Blackjack上开发一个游戏,遇到了一些困难。这次我需要你的帮助

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Game.hitPlayer(Game.java:263)
at Game.deal(Game.java:235)
at Game.actionPerformed(Game.java:169)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$500(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(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)
这就是代码本身:

public class Game extends JFrame implements ActionListener {
private static final long serialVersionUID = 1L;

private JFrame frmBlackjack;
private JButton btnDeal = new JButton("DEAL HAND");
private JButton btnHit = new JButton("HIT");
private JButton btnStand = new JButton("STAND");
private final JLabel lblBet = new JLabel("Place your bet:");
private JTextField textField;

public JPanel dealerPanel = new JPanel();
public JPanel playerPanel = new JPanel();
public JLabel lblStatus = new JLabel("");
public JLabel lblDealer = new JLabel("Dealer:");
public JLabel lblPlayer = new JLabel("Player:");
public JLabel lblMoney = new JLabel("Money: 100$");

private Hand playerHand;
private Hand dealerHand;
private Deck deck;
private Card newCard;
private Double money = 100.0;
private Double bet = 0.0;

/**
 * Launch the application.
 */
public static void main(String[] args) {
    EventQueue.invokeLater(new Runnable() {
        public void run() {
            try {
                Game window = new Game();
                window.frmBlackjack.setVisible(true);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
}

/**
 * Create the application.
 */
public Game() 
{
    initialize();
}

/**
 * Initialize the contents of the frame.
 */
private void initialize() 
{
    frmBlackjack = new JFrame();
    frmBlackjack.getContentPane().setFont(new Font("Tahoma", Font.PLAIN, 11));
    frmBlackjack.setTitle("Blackjack (21)");
    frmBlackjack.setBounds(100, 100, 600, 520);
    frmBlackjack.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    frmBlackjack.getContentPane().setLayout(null);

    btnDeal.setFont(new Font("Tahoma", Font.BOLD, 11));
    btnDeal.setBounds(10, 410, 150, 60);
    btnDeal.addActionListener(this);
    frmBlackjack.getContentPane().add(btnDeal);
    btnDeal.setEnabled(false);

    btnHit.setFont(new Font("Tahoma", Font.BOLD, 11));
    btnHit.setBounds(264, 410, 150, 60);
    btnHit.addActionListener(this);
    frmBlackjack.getContentPane().add(btnHit);
    btnHit.setEnabled(false);

    btnStand.setFont(new Font("Tahoma", Font.BOLD, 11));
    btnStand.setBounds(424, 410, 150, 60);
    btnStand.addActionListener(this);
    frmBlackjack.getContentPane().add(btnStand);
    btnStand.setEnabled(false);

    dealerPanel.setBounds(113, 11, 440, 160);
    frmBlackjack.getContentPane().add(dealerPanel);
    dealerPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

    playerPanel.setBounds(113, 185, 440, 160);
    frmBlackjack.getContentPane().add(playerPanel);
    playerPanel.setLayout(new FlowLayout(FlowLayout.CENTER, 5, 5));

    lblStatus.setFont(new Font("Agency FB", Font.PLAIN, 30));
    lblStatus.setHorizontalAlignment(SwingConstants.CENTER);
    lblStatus.setBounds(339, 351, 220, 50);
    frmBlackjack.getContentPane().add(lblStatus);

    lblDealer.setHorizontalAlignment(SwingConstants.CENTER);
    lblDealer.setFont(new Font("Agency FB", Font.PLAIN, 20));
    lblDealer.setBounds(10, 64, 93, 50);
    frmBlackjack.getContentPane().add(lblDealer);

    lblPlayer.setFont(new Font("Agency FB", Font.PLAIN, 20));
    lblPlayer.setHorizontalAlignment(SwingConstants.CENTER);
    lblPlayer.setBounds(10, 245, 93, 50);
    frmBlackjack.getContentPane().add(lblPlayer);

    lblMoney.setFont(new Font("Agency FB", Font.PLAIN, 20));
    lblMoney.setHorizontalAlignment(SwingConstants.LEFT);
    lblMoney.setBounds(40, 349, 75, 50);
    frmBlackjack.getContentPane().add(lblMoney);

    lblBet.setHorizontalAlignment(SwingConstants.CENTER);
    lblBet.setFont(new Font("Agency FB", Font.PLAIN, 20));
    lblBet.setBounds(135, 351, 100, 50);
    frmBlackjack.getContentPane().add(lblBet);

    textField = new JTextField();
    textField.setBounds(245, 368, 45, 20);
    frmBlackjack.getContentPane().add(textField);
    textField.setColumns(10);
    textField.addActionListener(this);
    textField.setEnabled(true);
}


@Override
public void actionPerformed(ActionEvent e)
{
    if (e.getSource() == btnHit) 
    {
        hitPlayer();
        if (playerHand.getBlackjackValue() > 21) 
        {
            checkWinner();
            btnHit.setEnabled(false);
            btnStand.setEnabled(false);
            btnDeal.setEnabled(false);
        }
    }

    if (e.getSource() == btnStand) 
    {
        while (dealerHand.getBlackjackValue() < 17 || playerHand.getBlackjackValue() > dealerHand.getBlackjackValue()) 
        {
            hitDealer();
        }
        checkWinner();
        btnHit.setEnabled(false);
        btnStand.setEnabled(false);
        btnDeal.setEnabled(false);
    }

    if (e.getSource() == btnDeal) 
    {
        deal();
        lblStatus.setText("");
        btnHit.setEnabled(true);
        btnStand.setEnabled(true);
        btnDeal.setEnabled(false);
    }   

    if (e.getSource() == textField)
    {
        String curBet = textField.getText();
        bet = Double.parseDouble(curBet); 
        textField.setEnabled(false);
        btnDeal.setEnabled(true);
    }
}

private void checkWinner() 
{
    dealerPanel.removeAll();
    for (int i = 0; i < dealerHand.getCardCount(); i++) 
    {
        dealerPanel.add(new JLabel(new ImageIcon("C:/Users/Talker/Desktop/cards/" + dealerHand.getCard(i).toString() + ".png")));
    }
    textField.setEnabled(true);
    if (playerHand.getBlackjackValue() > 21) 
    {
        lblStatus.setText("You Lost! (Over 21)");
        money -= bet;
        lblMoney.setText("Money:" + money + "$.");
    } 
    else if (dealerHand.getBlackjackValue() > 21) 
    {
        lblStatus.setText("Dealer Lost! (Over 21)");
        money += bet;
        lblMoney.setText("Money:" + money + "$.");
    } 
    else if (dealerHand.getBlackjackValue() < playerHand.getBlackjackValue()) 
    {
        lblStatus.setText("You Won!");
        money += bet;
        lblMoney.setText("Money:" + money + "$.");
    } 
    else if (dealerHand.getBlackjackValue() > playerHand.getBlackjackValue())
    {
        lblStatus.setText("Dealer Won!");
        money -= bet;
        lblMoney.setText("Money:" + money + "$.");
    }
    else 
        lblStatus.setText("It's a tie!");
}

private void deal() 
{
    playerPanel.removeAll();
    dealerPanel.removeAll();
    playerPanel.updateUI();
    dealerPanel.updateUI();
    //playerHand.clear();
    //dealerHand.clear();

    if (deck == null || deck.cardsLeft() < 15) 
    {
        deck = new Deck();
        deck.shuffleDeck();
    }
    hitPlayer();
    hitDealerDown();
    dealerHand.addCard(getNewCard());
    hitPlayer();
    hitDealer();

    //Check for blackjack!
    if(dealerHand.getBlackjackValue() == 21 && dealerHand.getBlackjackValue() != playerHand.getBlackjackValue())
    {
        lblStatus.setText("Blackjack! You Lost!");
        money -= bet;
        lblMoney.setText("Money:" + money + "$.");
    }
    if(playerHand.getBlackjackValue() == 21 && playerHand.getBlackjackValue() != dealerHand.getBlackjackValue())
    {
        lblStatus.setText("Blackjack! You Won!");
        money = bet + bet/2;
        lblMoney.setText("Money:" + money + "$.");
    }
    if(dealerHand.getBlackjackValue() == 21 && playerHand.getBlackjackValue() == 21)
        lblStatus.setText("It's a tie!");
}

private void hitPlayer() 
{
    Card newCard = deck.dealCard();
    playerHand.addCard(newCard);
    playerPanel.add(new JLabel(new ImageIcon("C:/Users/Talker/Desktop/cards/" + newCard.toString() + ".png")));
    playerPanel.updateUI();
}

private void hitDealerDown() 
{
    setNewCard(deck.dealCard());
    dealerPanel.add(new JLabel(new ImageIcon("C:/Users/Talker/Desktop/cards/b2fv.png")));
    dealerPanel.updateUI();
}

private void hitDealer() 
{
    Card newCard = deck.dealCard();
    dealerHand.addCard(newCard);
    dealerPanel.add(new JLabel(new ImageIcon("C:/Users/Talker/Desktop/cards/" + newCard.toString() + ".png")));
    dealerPanel.updateUI();
}

public Card getNewCard() {
    return newCard;
}

public void setNewCard(Card newCard) {
    this.newCard = newCard;
}
}


有什么问题?我不明白

您需要在游戏构造函数或从构造函数调用的初始化方法中初始化实例变量playerHand、dealrhand、deck等。您获得该NullPointerException是因为非基本实例变量的默认未初始化值为null。

在哪里初始化playerHand?您的异常是NullPointerException或NPE,您需要了解如何调试该异常的一般概念。您应该仔细阅读异常的stacktrace,找到出错的代码行,即引发异常的代码行,然后仔细检查该行,找出哪个变量为null,然后回溯到代码中以了解原因。相信我,你会一次又一次地遇到这些问题。例如,stacktrace在你的程序中给了你几行要查看的内容,包括Game.hitPlayerGame.java:263和Game.dealGame.java:235。谢谢大家,我之前初始化过它,但错误地删除了它!=]