请帮我整理一下这个java.awt.BoxLayout无法共享或NullPointerException

时间:2012-07-22 02:41:27

标签: java

下面的代码“Boxlayout示例符合要求,但在运行时抛出以下异常:

Exception in thread "main" java.lang.NullPointerException

at java.awt.Container.addImpl(Container.java: 1027)
at java.awt.Container.add(Container.java: 935)
at javax.swing.JFrame.addImpl(JFrame.java: 545)
at java.awt.Container.add(Container.java: 352)
at BoxExample.launchFrame(BoxExample.java:26)
at BoxExample.main(BoxExample.java:40)

请帮助我解决这个问题,因为它浪费了将近1天的生命......

//Boxlayout example

import java.awt.*;

import javax.swing.*;

public class BoxExample
{

public JFrame f;

public JButton b1, b2,b3,b4,b5;

public BoxExample()

{

f=new JFrame("Box example");

f.setTitle("Box Layout Example");

f.setSize(150, 150);

JButton b1=new JButton("Button 1");

JButton b2=new JButton("Button 2");

JButton b3=new JButton("Button 3");

JButton b4=new JButton("Button 4");

JButton b5=new JButton("Button 5");

}


public void launchFrame()

{

System.out.println("inside lf");

f.setLayout(new BoxLayout(f,BoxLayout.Y_AXIS));

System.out.println("after layset");

f.add(b1);

f.add(b2);

f.add(b3);

f.add(b4);

f.add(b5);

f.pack();

f.setVisible(true);

}


public static void main(String args[])

{

BoxExample guiWindow=new BoxExample();

System.out.println("main");

guiWindow.launchFrame();

}

}

1 个答案:

答案 0 :(得分:1)

您正在通过在类中声明它们,然后重新声明并在构造函数中初始化它们来遮蔽一些变量,主要是JButton变量b1,b2,b3,b4和b5。构造函数中新声明的变量与类中声明的变量不同,因此类变量将保持为null。

解决方案:不要在构造函数中重新声明变量。所以不要这样:

class Foo {
  private Bar bar;

  public Foo() {
    Bar bar = new Bar(); // bar is re-declared here!
  }
}

这样做:

class Foo {
  private Bar bar;

  public Foo() {
    bar = new Bar(); // notice the difference!
  }
}

此外,只要你有一个NullPointerException(NPE)仔细查看抛出异常的行,就在BoxExample类的第26行:

at BoxExample.launchFrame(BoxExample.java:26)

您将在该行上找到其中一个变量为null。如果你找出哪个变量,你通常可以回溯你的代码,看看它为什么是空的。