[英]Why does my code throw a NullPointerException?
我有一个JFrame
并自动生成Eclipse生成的内容窗格。
public JPanel contentPane = new JPanel();
public static Game frame;
main方法创建新框架:
frame = new Game();
frame.setVisible(true);
创建新实例:
public Game() {
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
contentPane.setLayout(null);
contentPane.setSize(500, 500);
setContentPane(contentPane);
在这结束时,我想创建一个我的Field.java的新对象(它扩展了JLabel
)
new Field(50, 50, 64, 64);
Field.java:
public Field(int x, int y, int x2, int y2) {
setBounds(x, y, x2, y2);
Game.frame.contentPane.add(this);
}
我希望你能理解我正在做的事情。 将字段添加到Game
类的contentPane
时,我得到一个NullPointerException
。 我认为, contentPane
为null
。 但为什么? 我该怎么做才能避免这种情况?
错误信息:
java.lang.NullPointerException
at Hackbaellchen.Field.<init>(Field.java:23)
at Hackbaellchen.Lemmings.<init>(Game.java:73)
at Hackbaellchen.Lemmings$1.run(Game.java:27)
Field.java:23是Game.frame.contentPane.add(this);
Game.java:73是new Field(50, 50, 64, 64);
50,50,64,64 new Field(50, 50, 64, 64);
解决方案不是尝试从Field
的构造函数中反向引用Game
实例。 这种逻辑无论如何都是不好的做法,在这里它试图在设置之前访问静态字段(从Game
构造函数的代码路径中)。
您应首先创建Field
实例,然后从已知存在的代码中将其分配给Game
。 所以移动线
Game.frame.contentPane.add(this);
到这样的地方(并用Field
变量的名称替换this
)。
根据您提供的信息,在不知道确切的错误堆栈跟踪的情况下,我认为您的NullPointerException的来源是:
contentPane.setLayout(null);
稍后在调用Game实例时,使用该null字段会抛出异常。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.