1

中央に大きなテキスト領域があり、下部に 5 つのボタンが並んだアプリケーションを作成したいと考えています。これが私のコードです:

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);
}

私のアプリケーションは実行さえしません。実行しようとするとクラッシュします。問題が何であるかわかりません。 それが役立つ場合の私のエラー:

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 行目で null 変数を「逆参照」しようとしていることを意味しますat TheDungeon.<init>(TheDungeon.java:38)

これにはbuttonPanelが関係していると思います。buildButtonPane() を呼び出したことはありますか? この呼び出しはどこにもありませんか? そうしないと、buttonPanel JPanel は null になります。

解決策: JPanel を使用する前にメソッドを呼び出します。さらに良いことに、メソッドが JPanel を返すようにし、それを使用します。

この問題から学ぶべき教訓は、特定の解決策ではなく、NullPointerException を読み取る方法です。どの行がエラーを引き起こしているかがわかります。次に、その行の変数をチェックしてどれが null かを確認し、コードをトレースしてその理由を確認できます。

于 2013-09-07T22:55:52.857 に答える