我正試圖爲學校設計一個非常簡單的模擬文明遊戲。現在我試圖做到這一點,當你點擊控制欄上的這個按鈕來創建一個新的小屋實例。我將把下面的錯誤報告和編碼錯誤發生的地方。類小屋陣列中的NullPointerException
錯誤報告:
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at controls.Sidebar.clickBuildHut(Sidebar.java:102)
at screen_window.Game_Window.mouseClicked(Game_Window.java:248)
at java.awt.Component.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Window.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
代碼發生錯誤:
public void newHut() {
numOfHuts++;
hut[numOfHuts] = new Hut(mouseX, mouseY, 0, numOfHuts);
}
小屋聲明在類的頂部:
Hut[] hut = new Hut[9999];
int numOfHuts;
Sidebar.clickBuildHut方法:
public boolean clickBuildHut(int mouseX, int mouseY){
if (viewConstruction){
int topLeftX = x + 2;
int topLeftY = y + 50 - 14;
int selectionWidth = width - 10;
int selectionHeight = 17;
for (int i = 0; i <= width; i++) {
for (int h = 0; h <= height; h++) {
if (mouseX == topLeftX + i && mouseY == topLeftY + h) {
first_map.setEditMode(true);
game_window.newHut();
return true;
}
}
}
}
return false;
}
first_map.setEditMode:
public void setEditMode(boolean editMode) {
this.editMode = editMode;
}
雖然我不認爲這是問題,因爲這是切換到真正的我正確地看到畫面的變化。如果你想讓我給你更多的信息,我可以,但我認爲它不會有任何用處,因爲它不是問題所在。
'小屋[]小屋=新小屋[1234];' – jlordo
你是否正在初始化'小屋'任何地方? – thejh
您的堆棧跟蹤表明NPE發生在'clickBuildHut'方法中,但是您已經顯示了'newHut'方法。請顯示'clickBuildHut'方法。 – rgettman