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

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

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

您正在通过在类中声明它们,然后在构造函数中重新声明和初始化它们来遮蔽一些变量,主要是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)仔细查看抛出exception的行时,在BoxExample类的第26行:

 at BoxExample.launchFrame(BoxExample.java:26) 

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