簡體   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