首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空指针异常

空指针异常
EN

Stack Overflow用户
提问于 2017-05-13 01:39:48
回答 2查看 137关注 0票数 0

我对StackOverFlow相当陌生。我在Java方面有多年的经验,但在这段代码中似乎找不到触发Null指针异常的行。所有进口都准备好了。

代码语言:javascript
复制
public class BallShooter extends JFrame{

    private JFrame ballshooter;
    private BallShooter bs;
    private MenuPanel mp;
    private MainPanel mep;
    private GamePanel gp;
    private Balls balls;

    private CardLayout card;
    private int[] leaderboard; 
    private boolean ballHitWall;
    public BallShooter()
    {   

        mep = new MainPanel();
        mp = new MenuPanel();
        gp = new GamePanel();

        ballshooter = new JFrame();
        ballshooter.setLocation(0, 0);
        ballshooter.setSize(800, 700);
        ballshooter.setDefaultCloseOperation(EXIT_ON_CLOSE);
        ballshooter.setBackground(Color.GRAY);
        ballshooter.setResizable(false);

        ballshooter.getContentPane().add(mep);
        ballshooter.setVisible(true);
        card = (CardLayout)(mep.getLayout());

    }
    public static void main(String [] args)
    {
        BallShooter balls = new BallShooter();
    }
    class MainPanel extends JPanel 
    {
        public MainPanel()
        {
            setSize(800,700);
            setVisible(true);
            setBackground(Color.GRAY);
            setLayout(new CardLayout());
            add(mp); <-- line 52
            add(gp);

        }
    }
    class MenuPanel extends JPanel implements ActionListener
    {
        private JButton startGame;
        private JButton leaderboard;
        private JButton instructions;
        public MenuPanel()
        {
            setLayout(null);
            setSize(800,700);
            setBackground(Color.GRAY);

            startGame = new JButton("Start the GAME.");
            leaderboard = new JButton("Go to LEADERBOARD.");
            instructions = new JButton("Instructions.");

            startGame.addActionListener(this);
            leaderboard.addActionListener(this);
            instructions.addActionListener(this);

            startGame.setBounds(300,100,200,150);
            leaderboard.setBounds(300,250,200,150);
            instructions.setBounds(300,400,200,150);


            add(startGame);
            add(leaderboard);
            add(instructions);
        }
        public void actionPerformed(ActionEvent e) {
            String in = e.getActionCommand();
            if(in.equals("Start the GAME."))
            {
                card.next(mep);
            }

        }

    }
    class GamePanel extends JPanel implements ActionListener
    {

        private JButton stats;

        private int pos1,pos2,pos3,pos4,pos5,pos6,pos7,pos8,pos9,pos10,pos11,pos12,pos13,pos14,pos15,pos16,pos17,pos18,pos19,pos20 ;
        private boolean onePos,twoPos,threePos,fourPos,fivePos,sixPos,sevenPos,eightPos,ninePos,tenPos,elevenPos,twelvePos,thirteenPos,fourteenPos,fifteenPos,sixteenPos,seventeenPos,eighteenPos,ninteenPos,twentyPos = true;
        private int x,y;
        public GamePanel()
        {
            balls = new Balls();
            onePos = true;
            setSize(800,700);
            setBackground(Color.GRAY);
            setLayout(null);
            if(onePos)
            {
                pos1 = 1;
                x = 100;
                y = 100;

                balls.setBounds(x,y, 50,50);
                gp.add(balls);

            }


        }

        public void actionPerformed(ActionEvent e) {}
        public void paintComponent(Graphics g)
        {
            super.paintComponent(g);
            g.setColor(Color.WHITE);
            g.drawRect(100, 100, 600, 500);

        }

    }
    class Balls extends JPanel {
        private int color;
        private int vX, vY;
        private int ballW = 50, ballH = 50;
        private int x,y;
        public Balls()
        {
            setSize(50,50);
        }
        public void paintComponent(Graphics g)
        {

            super.paintComponent(g);
            color = (int)(Math.random()*4+1);
            if(color == 1)
            {
                g.setColor(Color.YELLOW);
                g.drawOval(0, 0, ballW, ballH);
            }
            else if(color == 2)
            {
                g.setColor(Color.GREEN);
                g.drawOval(0, 0, ballW, ballH);
            }
            else if(color == 3)
            {
                g.setColor(Color.RED);
                g.drawOval(0, 0, ballW, ballH);
            }
            else if(color == 4)
            {
                g.setColor(Color.BLUE);
                g.drawOval(0, 0, ballW, ballH);
            }

        }

    }
}

我不知道怎么回事。它只是飞过我的头顶。错误:

代码语言:javascript
复制
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1097)
at java.awt.Container.add(Container.java:417)
at BallShooter$MainPanel.<init>(BallShooter.java:52)
at BallShooter.<init>(BallShooter.java:24)
at BallShooter.main(BallShooter.java:42)

如果有人能在这方面帮助我,那将是非常感谢的。编辑第一次投递,所以格式化有一个错误。类头没有进入代码部分,也没有进入最后一个括号。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-05-13 01:42:47

您正在初始化非静态嵌套类MainPanel,它在初始化mpgp字段之前使用BallShooter类中的字段(参见MainPanel构造函数中调用#add的行)。在创建了所有菜单之后,尝试调用mep#add,或者考虑一些类似于#init方法的内容(甚至是不同的层次结构/设计)。

票数 0
EN

Stack Overflow用户

发布于 2017-05-13 01:53:31

General rule --当您读取这样的堆栈跟踪时,请查找第一行,它是您的类之一,而不是JDK或库类。在这种情况下,问题可以在BallShooter.java的第52行中找到。

当该行运行时,mpnull,因此您试图向容器中添加一个null,因此出现了异常。

要解决这个问题,首先创建另外两个面板,最后创建MainPanel

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

https://stackoverflow.com/questions/43948412

复制
相关文章

相似问题

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