1

I want to create an application with a big area of text in the center with a row of 5 buttons on the bottom. Here is my code:

public TheDungeon()
{
  setTitle("InsertGameNameHere");
  setSize(750, 600);
  setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  setLayout(new BorderLayout());
  setLocationRelativeTo(null);


  gameScreen = new JLabel();

  add(gameScreen, BorderLayout.CENTER);
  add(buttonPanel, BorderLayout.SOUTH);

  setVisible(true);    

} 

private void buildButtonPanel()
{
  // Create a panel for the buttons.
  buttonPanel = new JPanel();

  // Create the buttons.
  b1 = new JButton("Button 1");
  b2 = new JButton("Button 2");
  b3 = new JButton("Button 3");
  b4 = new JButton("Button 4");
  b5 = new JButton("Button 5");

  // Add the buttons to the button panel.
  buttonPanel.add(b1);
  buttonPanel.add(b2);
  buttonPanel.add(b3);
  buttonPanel.add(b4);
  buttonPanel.add(b5);
}

My application won't even run. It crashes when I attempt to run it. I'm not sure what the issue is. My error if it helps any:

Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1086)
at java.awt.Container.add(Container.java:998)
at javax.swing.JFrame.addImpl(JFrame.java:562)
at java.awt.Container.add(Container.java:966)
at TheDungeon.<init>(TheDungeon.java:38)
at TheDungeon.main(TheDungeon.java:230)
4

1 回答 1

2

这个例外:

Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Container.java:1086)
at java.awt.Container.add(Container.java:998)
at javax.swing.JFrame.addImpl(JFrame.java:562)
at java.awt.Container.add(Container.java:966)
at TheDungeon.<init>(TheDungeon.java:38)
at TheDungeon.main(TheDungeon.java:230)

意味着您正在尝试在 TheDungeon 类的第 38 行“取消引用”一个空变量:at TheDungeon.<init>(TheDungeon.java:38).

我猜这涉及到buttonPanel。你有没有调用过 buildButtonPane() ——我在任何地方都没有看到这个调用?如果您不这样做,则 buttonPanel JPanel 将为空。

解决方法:在使用JPanel之前调用该方法。更好的是,让该方法返回一个 JPanel,然后您可以使用它。

从这个问题中吸取的教训不是具体的解决方案,而是如何阅读 NullPointerException。它会告诉您哪一行导致了错误,然后您可以检查该行上的变量以查看哪个为空,然后回溯到您的代码并查看原因。

于 2013-09-07T22:55:52.857 回答