2015-10-26 84 views
1

我不知道這個錯誤是什麼或爲什麼發生。我在網上發現的東西與TableViews無關。但是當我的囚犯類中的這個方法被我的TableView訪問時,它會拋出一個InvocationTargetException。這是我第一次使用TableView。Java InvocationTargetException當填充TableView

public int getCellBlock() { 
    for (int i = 0; i < Main.getCellBlocks().size(); i++) //for each cellblock 
     for (int j = 0; j < Main.getCellBlocks().get(i).getCells().size(); j++) //for each cell 
      for (int k = 0; k < Main.getCellBlocks().get(i).getCells().get(j).getInmates().size(); k++) 
       if (Main.getCellBlocks().get(i).getCells().get(j).getInmates().get(k).equals(this.idNum)) { 
        return i; 
       } 
    return -1; 
} 

細胞(有兩個子類,但即時通訊不訪問在其中數據用上述方法):

import java.io.Serializable; 
import java.util.ArrayList; 

public class Cell implements Serializable { 

private ArrayList<Integer> inmateIdNums; 
private int capacity = 0; 


Cell(int cap){ 
    capacity = cap; 
    inmateIdNums = new ArrayList<>(); 

    for (int i = 0; i < capacity; i++) 
     inmateIdNums.add(null); 

} 

public void add (int idNum){ 
    for (int i = 0; i < capacity; i++){ 
     if (inmateIdNums.get(i) == null) { 
      inmateIdNums.set(i, idNum); 
      break; 
     } 
    } 
} 

public void add (int idNum, int dur){} 

public void add (int idNum, String reason){} 

public ArrayList<Integer> getInmates(){ return inmateIdNums; } 

public int getEmptyBunks(){ 
    int emptyBunks = 0; 

    for (int i = 0; i < inmateIdNums.size(); i++){ 
     if (inmateIdNums.get(i) == null) 
      emptyBunks++; 
    } 

    return emptyBunks; 
} 
} 

監獄分區:

import java.io.Serializable; 
import java.util.ArrayList; 

public class CellBlock implements Serializable{ 

private String name; 
private String type; 
private int capacity; 
private int occupancy = 0; 
private ArrayList<Cell> cells; 

CellBlock(int cap, String nName, String nType, int cellCapacity){ 
    name = nName; 
    type = nType; 
    capacity = cap; 
    cells = new ArrayList<>(capacity); 

    if (type == "Maximum Security" || type == "Minimum Security") { 
     for (int i = 0; i < capacity; i++) 
      cells.add(new Cell(cellCapacity)); 
    } 
    else if(type == "Infirmary"){ 
     for (int i = 0; i < capacity; i++) 
      cells.add(new InfirmaryCell(cellCapacity)); 
    } 
    else if(type == "Isolation"){ 
     for (int i = 0; i < capacity; i++) 
      cells.add(new IsolationCell(cellCapacity)); 
    } 
} 

public void addInmate(int cell, int inmateIdNum){ 
    cells.get(cell-1).add(inmateIdNum); 
    occupancy++; 
} 

public void addInmate(int cell, int inmateIdNum, String reason){ 
    cells.get(cell-1).add(inmateIdNum, reason); 
    occupancy++; 
} 

public void addInmate(int cell, int inmateIdNum, int duration){ 
    cells.get(cell-1).add(inmateIdNum, duration); 
    occupancy++; 
} 

public void removeInmate(int inmateIdNum){ 
    //search for inmate and remove from list 
} 

public ArrayList<Cell> getInmates(){ return cells; } 

public boolean checkCapacity(){ 
    if (capacity > occupancy) 
     return true; 

    return false; 
} 

public ArrayList<Cell> getCells(){ return cells; } 

public ArrayList<String> getOpenCells(){ 
    ArrayList<String> openCells = new ArrayList<>(); 

    for (int i = 0; i < cells.size();i++){ 
     if (cells.get(i).getEmptyBunks() > 0) 
      openCells.add(Integer.toString(i+1)); 
    } 

    return openCells; 
} 
} 

的錯誤:

enter image description here

enter image description here

+0

原因是Prisoner.java第68行有一個'NullPointerException'。 (你應該在問題中指出哪一行是第68行。)這意味着你正在調用一個'null'引用的方法。既然你的代碼把方法調用的長序列鏈接在一​​起,你可能不得不解開那些來弄清楚什麼是空的。 –

+1

請不要張貼堆棧跟蹤的截圖,而是將堆棧跟蹤文本複製並粘貼到您的問題中。 – jewelsea

+0

@jewelsea我打算這樣做,但是這麼長(比圖像中的東西還要長),我無法用任何方式來格式化所有那些容易在眼睛上看到的東西。 – Alyssa

回答

0

我不確定它是做了什麼,但我自己解決了這個問題。循環很好。

問題是兩件事之一 - 比較,或我已寫信息的文件(我正在使用二進制文件和ObjectInputStream/ObjectOutputStream)。

在單元構造我:

for (int i = 0; i < capacity; i++) 
     inmateIdNums.add(null); 

,並避免比較Integernull我把它改爲:

for (int i = 0; i < capacity; i++) 
     inmateIdNums.add(0); 

這並沒有解決我的問題。所以我只能假設某人在寫這篇蹩腳的比較的過程中寫了一個文件出了問題。作爲最後的努力,我刪除了我一直在使用的文件並全新運行我的程序以創建新文件並添加新條目。

問題解決。