Java 填充 TableView 时出现 InvocationTargetException
Java InvocationTargetException while populating TableView
我不确定这个错误是什么或为什么会发生。我在网上找到的所有内容都与 TableViews 无关。但是当我的 TableView 访问我的囚犯 Class 中的这个方法时,它会抛出一个 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;
}
}
错误:
我不确定是谁做的,但我自己解决了这个问题。循环很好。
问题是两件事之一 - 比较,或我写入信息的文件(我使用的是二进制文件和 ObjectInputStream
/ObjectOutputStream
)。
在我的 Cell 构造函数中:
for (int i = 0; i < capacity; i++)
inmateIdNums.add(null);
为了避免将 Integer
与 null
进行比较,我将其更改为:
for (int i = 0; i < capacity; i++)
inmateIdNums.add(0);
这没有解决我的问题。因此,我只能假设在进行这种糟糕的比较时,有人在写入我的一个文件时出了问题。作为最后的努力,我删除了我一直在使用的文件,并 运行 我的程序重新创建新文件并添加新条目。
问题已解决。
我不确定这个错误是什么或为什么会发生。我在网上找到的所有内容都与 TableViews 无关。但是当我的 TableView 访问我的囚犯 Class 中的这个方法时,它会抛出一个 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;
}
}
错误:
我不确定是谁做的,但我自己解决了这个问题。循环很好。
问题是两件事之一 - 比较,或我写入信息的文件(我使用的是二进制文件和 ObjectInputStream
/ObjectOutputStream
)。
在我的 Cell 构造函数中:
for (int i = 0; i < capacity; i++)
inmateIdNums.add(null);
为了避免将 Integer
与 null
进行比较,我将其更改为:
for (int i = 0; i < capacity; i++)
inmateIdNums.add(0);
这没有解决我的问题。因此,我只能假设在进行这种糟糕的比较时,有人在写入我的一个文件时出了问题。作为最后的努力,我删除了我一直在使用的文件,并 运行 我的程序重新创建新文件并添加新条目。
问题已解决。