繁体   English   中英

为什么我的代码会抛出NullPointerException?

[英]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 我认为, contentPanenull 但为什么? 我该怎么做才能避免这种情况?

错误信息:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM