首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java getText NullPointerException

Java getText NullPointerException
EN

Stack Overflow用户
提问于 2011-10-13 22:15:00
回答 3查看 453关注 0票数 0

我花了大约2个小时试图理解为什么我的代码总是抛出运行时错误。它不想接受用户输入...我很确定我的getext实现是正确的。你们能帮我看看我的代码,看看我哪里做错了吗?

代码语言:javascript
复制
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.border.*;

public class Mdt1 extends JFrame implements ActionListener{

/**
 * 
 */
private static final long serialVersionUID = 1L;
/**
 * @param args
 */
 JTextField twager, dcard1, dcard2, pcard1, pcard2;

public Mdt1()  {
    JFrame blackjack = new JFrame();
    Border wwager = BorderFactory.createTitledBorder("Wager");
    JPanel pwager = new JPanel();
    pwager.setBorder(wwager);
    JLabel lwager = new JLabel("Enter wager:");
    JTextField twager = new JTextField(6);
    twager.addActionListener(this);
    pwager.add(lwager);
    pwager.add(twager);

    JPanel pplayer = new JPanel();
    Border wayer = BorderFactory.createTitledBorder("Player");
    pplayer.setLayout(new BoxLayout(pplayer, BoxLayout.Y_AXIS));
    pplayer.setBorder(wayer);
    pplayer.setSize(100, 100);
    JTextField pcard1 = new JTextField(6);
    pcard1.setEditable(false);
    JTextField pcard2 = new JTextField(6);
    pcard2.setEditable(false);
    pplayer.add(pcard1);
    pplayer.add(pcard2);


    JPanel pdealer = new JPanel();
    Border wealer = BorderFactory.createTitledBorder("Dealer");
    pdealer.setLayout(new BoxLayout(pdealer, BoxLayout.Y_AXIS));
    pdealer.setBorder(wealer);
    pdealer.setSize(100, 100);
    JTextField dcard1 = new JTextField(6);
    dcard1.setEditable(false);
    JTextField dcard2 = new JTextField(6);
    dcard2.setEditable(false);
    pdealer.add(dcard1);
    pdealer.add(dcard2);

    JPanel cards = new JPanel();
    Border wards = BorderFactory.createTitledBorder("Cards");
    cards.setBorder(wards);
    cards.setSize(220, 80);
    cards.add(pplayer);
    cards.add(pdealer);

    JPanel pendgame = new JPanel();
    Border wesult = BorderFactory.createTitledBorder("Endgame");
    pendgame.setBorder(wesult);



    blackjack.setLayout(new BorderLayout());
    blackjack.setVisible(true);
    blackjack.setSize(200, 200);
    blackjack.setTitle("♣ Blackjack ♠");
    blackjack.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    blackjack.add(pwager, BorderLayout.NORTH);
    blackjack.add(cards);
    blackjack.pack();
    blackjack.setResizable(false);

}

public void actionPerformed(ActionEvent e) {
    String swager = twager.getText();
    double wager;
    int  dealer1, dealer2, player1, player2;
    int  dealervalue1, dealervalue2, playervalue1, playervalue2;
    int  dealerTotal, playerTotal;


    wager = Double.parseDouble(swager);

    Random r=new Random();
    // card faces
    dealer1=r.nextInt(13) + 1;
    String sdealer1 = Integer.toString(dealer1);
    dealer2=r.nextInt(13) + 1;
    String sdealer2 = Integer.toString(dealer2);
    player1=r.nextInt(13) + 1;
    String splayer1 = Integer.toString(player1);
    player2=r.nextInt(13) + 1;
    String splayer2 = Integer.toString(player2);
    // Show dealer's card faces
    switch(dealer1)
    {
    case 1: dcard1.setText("Ace "); break;
    case 11: dcard1.setText("Jack"); break;
    case 12: dcard1.setText("Queen"); break;
    case 13: dcard1.setText("King"); break;
    default: dcard1.setText(sdealer1); break; 
    } 
    switch(dealer2)
    {
    case 1: dcard2.setText("Ace"); break;
    case 11: dcard2.setText("Jack"); break;
    case 12: dcard2.setText("Queen"); break;
    case 13: dcard2.setText("King"); break;
    default: dcard2.setText(sdealer2); break;
    } 
    // Show player's card faces
    switch(player1)
    {
    case 1: System.out.print("Ace"); break;
    case 11: System.out.print("Jack"); break;
    case 12: System.out.print("Queen"); break;
    case 13: System.out.print("King"); break;
    default: System.out.print(splayer1); break;
    } 
    switch(player2)
    {
    case 1: System.out.println("Ace"); break;
    case 11: System.out.println("Jack"); break;
    case 12: System.out.println("Queen"); break;
    case 13: System.out.println("King"); break;
    default: System.out.println(splayer2); break;
    } 
    // Determine card values
    dealervalue1 = dealer1; 
    switch(dealer1)
    {
    case 1:  dealervalue1=11; break;
    case 11:  case 12:  case 13:
        dealervalue1=10;  break;
    } // switch
    dealervalue2 = dealer2; 
    switch(dealer2)
    {
    case 1:  dealervalue2=11; break;
    case 11:  case 12:  case 13:
        dealervalue2=10;  break;
    } // switch
    dealerTotal = dealervalue1+dealervalue2;
    if (dealerTotal == 22)      dealerTotal = 12;
    playervalue1 = player1; 
    switch(player1)
    {
    case 1:  playervalue1=11; break;
    case 11:  case 12:  case 13:
        playervalue1=10;  break;
    } // switch
    playervalue2 = player2; 
    switch(player2)
    {
    case 1:  playervalue2=11; break;
    case 11:  case 12:  case 13:
        playervalue2=10;  break;
    } // switch
    playerTotal = playervalue1+playervalue2;
    if (playerTotal == 22)
        playerTotal = 12;
    if (playerTotal == 21)
    { 
        wager = wager * 1.5;
        JOptionPane.showMessageDialog(null, "You have a Blackjack!!! \n You won: $" + wager);

        return;
    }
    if (playerTotal >= dealerTotal)
    {
        System.out.println("" + wager);
        return;
    }
    JOptionPane.showMessageDialog(null, "You lost: $" + wager, "You lost!",  JOptionPane.ERROR_MESSAGE);

    System.out.println(swager);
} 

public static void main(String[] args) {
    // TODO Auto-generated method stub
    /**
     * 2
     * 2-card Blackjack game
     */
    Mdt1 black = new Mdt1();
}// main

}
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-10-13 22:18:57

您有实例字段- JTextField twager, dcard1, dcard2, pcard1, pcard2;,但是在方法Mdt1()中,您将JTextField的引用存储到本地引用变量中。

代码语言:javascript
复制
public Mdt1()  {
    JFrame blackjack = new JFrame();
    Border wwager = BorderFactory.createTitledBorder("Wager");
    JPanel pwager = new JPanel();
    pwager.setBorder(wwager);
    JLabel lwager = new JLabel("Enter wager:");
 //   JTextField twager = new JTextField(6); //<---  Local variable
    twager = new JTextField(6);              //<--- correction
    twager.addActionListener(this);
    pwager.add(lwager);
    pwager.add(twager);
    ....
}
票数 4
EN

Stack Overflow用户

发布于 2011-10-13 22:20:57

您在构造函数中使用另一个同名变量隐藏了类实例变量twager。实际上,您从未初始化过您的类实例。

票数 3
EN

Stack Overflow用户

发布于 2011-10-13 22:22:42

在您的构造函数中,您正在将您拥有的变量重新声明为类变量。

你的类变量是JTextField twager,dcard1,dcard2,pcard1,pcard2;

在名为Mdt1()的构造函数中,您可以在本地创建这些变量。

例如,如果您希望解决此问题,则应将行JTextField JTextField= twager= JTextField(6);更改为new twager (6);。

这应该可以解决这个问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7755499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档