Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java小程序中的Java.lang NullPointerException_Java_Nullpointerexception_Applet - Fatal编程技术网

Java小程序中的Java.lang NullPointerException

Java小程序中的Java.lang NullPointerException,java,nullpointerexception,applet,Java,Nullpointerexception,Applet,大家晚上好。我一直绞尽脑汁试图自己回答这个问题,但我不知所措,正在考虑扔东西。让我先说明一下,这是一个学校项目,老师让我重新提交,以获得及格分数,我不是在寻找直接副本和过去的代码,但我需要帮助找出如何解决这个问题。原始代码打开小程序,我得到启动:小程序未初始化错误。在Eclipse中,我得到了java.lang.NullPointerException,其中有几行我不知道它们来自哪里。请参阅代码和错误列表。提前谢谢 Error List java.lang.NullPointerExceptio

大家晚上好。我一直绞尽脑汁试图自己回答这个问题,但我不知所措,正在考虑扔东西。让我先说明一下,这是一个学校项目,老师让我重新提交,以获得及格分数,我不是在寻找直接副本和过去的代码,但我需要帮助找出如何解决这个问题。原始代码打开小程序,我得到启动:小程序未初始化错误。在Eclipse中,我得到了java.lang.NullPointerException,其中有几行我不知道它们来自哪里。请参阅代码和错误列表。提前谢谢

Error List
java.lang.NullPointerException
    at java.awt.Container.addImpl(Container.java:1091)
    at java.awt.Container.add(Container.java:971)
    at SodaMachine.init(SodaMachine.java:43)
    at sun.applet.AppletPanel.run(AppletPanel.java:434)
    at java.lang.Thread.run(Thread.java:745)
苏打机器
import java.applet.applet;
导入java.awt.*;
导入java.awt.event.ActionEvent;
导入java.awt.event.ActionListener;
导入java.text.DecimalFormat;
@抑制警告(“串行”)
公共类SodaMachine扩展Applet
{
私有文本字段反馈文本;
私有文本字段changeText;
私有文本字段creditText;
private Panel userMoneyPanel;//保留显示机器当前金额的面板,即交易结束时应付给用户的金额
private Panel drinksPanel;//保留显示可用饮料选择的面板
private Panel depositPanel;//保留显示用户可以输入的货币的面板
专用面板用户反馈面板;
int colaStock=3;
int-lemonLimeStock=3;
int grapeStock=3;
int rootBeerStock=3;
int-waterStock=3;
双倍成本=0.75;
双积分=0.00;
双变=0.00;
公共void init()
{
//将要建造的面板
builduserMoneyPanel();
builddrinksPanel();
builddepositPanel();
builduserFeedbackPanel();
//小程序的布局管理器
setLayout(新的BorderLayout());
//将面板添加到小程序
添加(存储面板,BorderLayout.NORTH);
添加(userFeedbackPanel,BorderLayout.SOUTH);
添加(drinksPanel,BorderLayout.EAST);
添加(userMoneyPanel,BorderLayout.WEST);
}
//用户货币面板构建方法,用于显示机器中的货币和用户的更改
私有void builduserMoneyPanel()
{
Panel userMoney=new Panel();
标签信用标签=新标签(“信用”);
标签变更标签=新标签(“变更”);
TextField creditText=新的TextField(10);
creditText.setEditable(false);
TextField changeText=新的TextField(10);
changeText.setEditable(false);
setLayout(新的GridLayout(2,2));
userMoney.add(creditLabel);
userMoney.add(changelab);
userMoney.add(creditText);
userMoney.add(changeText);
}
//用户将钱添加到机器以进行交易的存款方法
专用面板()
{
面板存放面板=新面板();
按钮镍币按钮=新按钮(“插入镍”);
按钮尺寸按钮=新按钮(“插入尺寸”);
按钮四分之一按钮=新按钮(“插入四分之一”);
按钮美元按钮=新按钮(“插入美元”);
addActionListener(新的nickelButtonListener());
addActionListener(新的dimeButtonListener());
addActionListener(新的quarterButtonListener());
addActionListener(新的dollarButtonListener());
setLayout(新的GridLayout(1,4));
添加(镍币按钮);
depositPanel.add(添加按钮);
添加(四分之一按钮);
添加(dollarButton);
}
//方法显示用户可从中选择的饮料
私有void builddrinksPanel()
{
drinksPanel=新面板();
按钮colaButton=新按钮(“可乐”);
按钮lemonLimeButton=新按钮(“柠檬酸橙”);
按钮图形按钮=新按钮(“葡萄”);
按钮rootBeerButton=新按钮(“根啤酒”);
按钮水按钮=新按钮(“水”);
addActionListener(新的colaButtonListener());
addActionListener(新的lemonLimeButtonListener());
addActionListener(新的grapeButtonListener());
addActionListener(新的rootBeerButtonListener());
addActionListener(新的waterButtonListener());
setLayout(新的GridLayout(5,1));
添加(colaButton);
添加(lemonLimeButton);
添加(grapeButton);
添加(rootBeerButton);
添加(水按钮);
}
//告诉用户饮料是否缺货或他们是否没有足够的钱购买饮料的方法
私有void builduserFeedbackPanel()
{
userFeedbackPanel=新面板();
TextField feedbackText=新建TextField();
feedbackText.setEditable(假);
}
//小程序中所有饮料选择按钮的侦听器
私有类colaButtonListener实现ActionListener
{
已执行的公共无效操作(操作事件e)
{
DecimalFormat美元=新的DecimalFormat(“$”0.00”);
if(colaStock==0)
{
feedbackText.setText(“库存不足,请重新选择”);
}
如果(信用<成本)
{
feedbackText.setText(“资金不足,请插入更多资金”);
}
如果(信用>=成本)
{
colaStock-=1;
变更=信用-成本;
如果(变化==0.00)
{
changeText.setText(“”);
}
其他的
{
changeText.setText(美元格式(change));
}
}
}
}
私有类lemonLimeButtonListener实现ActionListener
{
已执行的公共无效操作(偶数操作)
import java.applet.Applet;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.DecimalFormat;

@SuppressWarnings("serial")
public class SodaMachine extends Applet
{
    private TextField feedbackText;
    private TextField changeText;
    private TextField creditText;
    private Panel userMoneyPanel; //To hold Panel that shows current amount of money in machine, money due to user at end of transaction
    private Panel drinksPanel; //To hold Panel that shows available drink selections
    private Panel depositPanel; //To hold Panel that shows what money can be entered by user
    private Panel userFeedbackPanel;
    int colaStock = 3;
    int lemonLimeStock = 3;
    int grapeStock = 3;
    int rootBeerStock = 3;
    int waterStock = 3;
    double cost = 0.75;
    double credit = 0.00;
    double change = 0.00;


    public void init() 
    {

        //Panels to be built
        builduserMoneyPanel();
        builddrinksPanel();
        builddepositPanel();
        builduserFeedbackPanel();

        //layout manager for applet
        setLayout(new BorderLayout());

        //add Panels to applet
        add(depositPanel, BorderLayout.NORTH);
        add(userFeedbackPanel, BorderLayout.SOUTH);
        add(drinksPanel, BorderLayout.EAST);
        add(userMoneyPanel, BorderLayout.WEST);
    }

    //user Money Panel build method to show money in machine and user's change
    private void builduserMoneyPanel()
    {
        Panel userMoney = new Panel();
        Label creditLabel = new Label("Credit");
        Label changeLabel = new Label("Change");
        TextField creditText = new TextField(10);
        creditText.setEditable(false);
        TextField changeText = new TextField(10);
        changeText.setEditable(false);
        userMoney.setLayout(new GridLayout(2, 2));
        userMoney.add(creditLabel);
        userMoney.add(changeLabel);
        userMoney.add(creditText);
        userMoney.add(changeText);
    }

    //deposit method for user to add money to machine to make a transaction
    private void builddepositPanel()
    {
        Panel depositPanel = new Panel();
        Button nickelButton = new Button("INSERT NICKEL");
        Button dimeButton = new Button("INSERT DIME");
        Button quarterButton = new Button("INSERT QUARTER");
        Button dollarButton = new Button("INSERT DOLLAR");
        nickelButton.addActionListener(new nickelButtonListener());
        dimeButton.addActionListener(new dimeButtonListener());
        quarterButton.addActionListener(new quarterButtonListener());
        dollarButton.addActionListener(new dollarButtonListener());
        depositPanel.setLayout(new GridLayout(1, 4));
        depositPanel.add(nickelButton);
        depositPanel.add(dimeButton);
        depositPanel.add(quarterButton);
        depositPanel.add(dollarButton);
    }

    //method to show user available drink selection to choose from
    private void builddrinksPanel()
    {
        drinksPanel = new Panel();
        Button colaButton = new Button("COLA");
        Button lemonLimeButton = new Button("LEMON LIME");
        Button grapeButton = new Button("GRAPE");
        Button rootBeerButton = new Button("ROOT BEER");
        Button waterButton = new Button("WATER");
        colaButton.addActionListener(new colaButtonListener());
        lemonLimeButton.addActionListener(new lemonLimeButtonListener());
        grapeButton.addActionListener(new grapeButtonListener());
        rootBeerButton.addActionListener(new rootBeerButtonListener());
        waterButton.addActionListener(new waterButtonListener());
        drinksPanel.setLayout(new GridLayout(5, 1));
        drinksPanel.add(colaButton);
        drinksPanel.add(lemonLimeButton);
        drinksPanel.add(grapeButton);
        drinksPanel.add(rootBeerButton);
        drinksPanel.add(waterButton);
    }

    //method to tell user if drink is out of stock or if they have not added sufficent money to purchase drink
    private void builduserFeedbackPanel()
    {
        userFeedbackPanel = new Panel();
        TextField feedbackText = new TextField();
        feedbackText.setEditable(false);

    }

    //listeners for all drink choice buttons in applet
    private class colaButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            DecimalFormat dollar = new DecimalFormat("'$'0.00");
            if(colaStock == 0)
            {
                feedbackText.setText("Insufficent stock available. Please make another selection.");
            }

            if(credit < cost)
            {
                feedbackText.setText("Insufficent funds. Please insert more money.");
            }

            if(credit >= cost)
            {
                colaStock -= 1;
                change = credit - cost;
                if(change == 0.00)
                {
                    changeText.setText("");
                }
                else
                {
                    changeText.setText(dollar.format(change));
                }
            }
        }
    }

    private class lemonLimeButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            DecimalFormat dollar = new DecimalFormat("'$'0.00");

            if(lemonLimeStock == 0)
            {
                feedbackText.setText("Insufficent stock available. Please make another selection.");
            }

            if(credit < cost)
            {
                feedbackText.setText("Insufficent funds. Please insert more money.");
            }

            if(credit >= cost)
            {
                lemonLimeStock -= 1;
                change = credit - cost;
                if(change == 0.00)
                {
                    changeText.setText("");
                }
                else
                {
                    changeText.setText(dollar.format(change));
                }
            }
        }
    }

    private class grapeButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            DecimalFormat dollar = new DecimalFormat("'$'0.00");

            if(grapeStock == 0)
            {
                feedbackText.setText("Insufficent stock available. Please make another selection.");
            }

            if(credit < cost)
            {
                feedbackText.setText("Insufficent funds. Please insert more money.");
            }

            if(credit >= cost)
            {
                grapeStock -= 1;
                change = credit - cost;
                if(change == 0.00)
                {
                    changeText.setText("");
                }
                else
                {
                    changeText.setText(dollar.format(change));
                }
            }
        }
    }

    private class rootBeerButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            DecimalFormat dollar = new DecimalFormat("'$'0.00");

            if(rootBeerStock == 0)
            {
                feedbackText.setText("Insufficent stock available. Please make another selection.");
            }

            if(credit < cost)
            {
                feedbackText.setText("Insufficent funds. Please insert more money.");
            }

            if(credit >= cost)
            {
                rootBeerStock -= 1;
                change = credit - cost;
                if(change == 0.00)
                {
                    changeText.setText("");
                }
                else
                {
                    changeText.setText(dollar.format(change));
                }
            }
        }
    }

    private class waterButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            DecimalFormat dollar = new DecimalFormat("'$'0.00");

            if(waterStock == 0)
            {
                feedbackText.setText("Insufficent stock available. Please make another selection.");
            }

            if(credit < cost)
            {
                feedbackText.setText("Insufficent funds. Please insert more money.");
            }

            if(credit >= cost)
            {
                waterStock -= 1;
                change = credit - cost;
                if(change == 0.00)
                {
                    changeText.setText("");
                }
                else
                {
                    changeText.setText(dollar.format(change));
                }
            }
        }
    }

    //listeners for all monetary choices available to user for purchasing drink
    private class nickelButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            DecimalFormat dollar = new DecimalFormat("'$'0.00");
            credit += .05;
            creditText.setText(dollar.format(credit));
        }
    }

    private class dimeButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            DecimalFormat dollar = new DecimalFormat("'$'0.00");
            credit += .10;
            creditText.setText(dollar.format(credit));
        }
    }

    private class quarterButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            DecimalFormat dollar = new DecimalFormat("'$'0.00");
            credit += .25;
            creditText.setText(dollar.format(credit));
        }
    }

    private class dollarButtonListener implements ActionListener
    {
        public void actionPerformed(ActionEvent e)
        {
            DecimalFormat dollar = new DecimalFormat("'$'0.00");
            credit += 1.00;
            creditText.setText(dollar.format(credit));
        }
    }
}
  private Panel userMoneyPanel;
  ...

  private void builduserMoneyPanel()
  {
     // Panel userMoney = new Panel();  // this is wrong...
     userMoneyPanel = new Panel();
     ...
private void builduserMoneyPanel()
{
    Panel userMoney = new Panel(); // <= This is not good !
    //...
}
private void builduserMoneyPanel()
{
    userMoney = new Panel(); // initialise this.userMoney
    //...
}