[英]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.