无法转换为 [Ljava.lang.Object;
Cannot be cast to [Ljava.lang.Object;
我编写这段代码是为了将 jTable 设置为适合从我的查询返回的数据的模型。我不确定为什么会发生这种情况,但我确实有一个使用相同代码的示例并且它运行良好。
注意:查询从链接到另一个 table 的 table 调用记录。
注意:有人可能会说这是一个重复的问题,但我觉得不是,因为我查看了那个问题并且没有解决方案帮助我,我尝试使用迭代器来代替,但发生了同样的错误。
任何建议。
这是代码
public void createModelsAndEquipmentTableModel(){
Query query = FinancialDBPUEntityManager.createQuery("SELECT t FROM Stocktbl t WHERE t.chemical = FALSE");
List<Object[]> results = query.getResultList();
String headings[] = {"Product ID", "Product Name", "Number In Stock", "Number Needs Replacing"};
Object data[][] = new Object[results.size()][headings.length];
int index = 0;
for(Object[] obj: results){// error occurs here.
data[index++] = obj;
}
DefaultTableModel model = new DefaultTableModel(data, headings);
tblquipment.setModel(model);
}
这是堆栈跟踪的相关部分:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: GUIPac.Stocktbl cannot be cast to [Ljava.lang.Object;
at GUIPac.ViewStockInfo.createChemicalsTableModel(ViewStockInfo.java:53)
at GUIPac.ViewStockInfo.<init>(ViewStockInfo.java:30)
getResultList()
- 方法返回 List<Stocktbl>
而不是 Object[]
的列表。
在运行时没有泛型。但是当你迭代它时,转换失败。
查询 "SELECT t FROM Stocktbl t WHERE t.chemical = FALSE"
将 return Stocktbl
个对象。
当遍历 ResultList 时,这会导致 ClassCastExceptions。
我建议使用这个 createQuery-Method:
TypedQuery<Stocktbl> query = FinancialDBPUEntityManager.createQuery("SELECT t FROM Stocktbl t WHERE t.chemical = FALSE", Stocktbl.class);
然后解决所有编译器警告和错误。
如果您需要对象数组,则必须在使用 JPA 时手动生成它。下面是创建这些对象数组的伪代码:
for(Stocktbl stock : results){// no error occurs here anymore.
Object[] obj = new Object[] {stock.ProductId, stock.ProductName, stock.NumberInStock, stock.numberNeedsReplacing};
data[index++] = obj;
}
请更改 Stocktbl stock
的字段名称以适合您的 Stocktbl
class
我编写这段代码是为了将 jTable 设置为适合从我的查询返回的数据的模型。我不确定为什么会发生这种情况,但我确实有一个使用相同代码的示例并且它运行良好。 注意:查询从链接到另一个 table 的 table 调用记录。 注意:有人可能会说这是一个重复的问题,但我觉得不是,因为我查看了那个问题并且没有解决方案帮助我,我尝试使用迭代器来代替,但发生了同样的错误。 任何建议。
这是代码
public void createModelsAndEquipmentTableModel(){
Query query = FinancialDBPUEntityManager.createQuery("SELECT t FROM Stocktbl t WHERE t.chemical = FALSE");
List<Object[]> results = query.getResultList();
String headings[] = {"Product ID", "Product Name", "Number In Stock", "Number Needs Replacing"};
Object data[][] = new Object[results.size()][headings.length];
int index = 0;
for(Object[] obj: results){// error occurs here.
data[index++] = obj;
}
DefaultTableModel model = new DefaultTableModel(data, headings);
tblquipment.setModel(model);
}
这是堆栈跟踪的相关部分:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: GUIPac.Stocktbl cannot be cast to [Ljava.lang.Object;
at GUIPac.ViewStockInfo.createChemicalsTableModel(ViewStockInfo.java:53)
at GUIPac.ViewStockInfo.<init>(ViewStockInfo.java:30)
getResultList()
- 方法返回 List<Stocktbl>
而不是 Object[]
的列表。
在运行时没有泛型。但是当你迭代它时,转换失败。
查询 "SELECT t FROM Stocktbl t WHERE t.chemical = FALSE"
将 return Stocktbl
个对象。
当遍历 ResultList 时,这会导致 ClassCastExceptions。
我建议使用这个 createQuery-Method:
TypedQuery<Stocktbl> query = FinancialDBPUEntityManager.createQuery("SELECT t FROM Stocktbl t WHERE t.chemical = FALSE", Stocktbl.class);
然后解决所有编译器警告和错误。
如果您需要对象数组,则必须在使用 JPA 时手动生成它。下面是创建这些对象数组的伪代码:
for(Stocktbl stock : results){// no error occurs here anymore.
Object[] obj = new Object[] {stock.ProductId, stock.ProductName, stock.NumberInStock, stock.numberNeedsReplacing};
data[index++] = obj;
}
请更改 Stocktbl stock
的字段名称以适合您的 Stocktbl
class