下面的代码“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();
}
}
答案 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。如果你找出哪个变量,你通常可以回溯你的代码,看看它为什么是空的。