线程“AWT-EventQueue-0”java.lang.ClassCastException错误中出现异常
当我运行应从数据库下载项目的方法时,将出现以下错误:线程“AWT-EventQueue-0”java.lang.ClassCastException错误中出现异常,java,Java,当我运行应从数据库下载项目的方法时,将出现以下错误: Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: com.dke.ps.Tables.Item cannot be cast to com.dke.ps.Items.Item at com.dke.ps.Shop.Shop.loadItems(Shop.java:161) at com.dke.ps.Shop.Shop.init(Shop.
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: com.dke.ps.Tables.Item cannot be cast to com.dke.ps.Items.Item
at com.dke.ps.Shop.Shop.loadItems(Shop.java:161)
at com.dke.ps.Shop.Shop.init(Shop.java:122)
at com.dke.ps.Shop.Shop.<init>(Shop.java:60)
还有我的com.dke.ps.Items.Item
**
* General class for an item containing common information sutch as id, name,
* description, path to an icon, price and type of an item.
* @author valecvit
* @author koresmi1
*/
public abstract class Item
{
/**
* Unique id of an item.
*/
public int itemid;
/**
* Name of an item.
*/
public String name;
/**
* Description of an item.
*/
public String description;
/**
* Relative path to item image.
*/
public String icon;
/**
* Type of an item.
*/
public int type;
/**
* Price of an item.
*/
public int price;
}
我真的不知道问题出在哪里。谁能给我解释一下例外情况吗
顺便说一句
下面是getDbItems方法:
ArrayList<Item> dbItems = new ArrayList<>();
EntityTransaction entr=em.getTransaction();
entr.begin();
TypedQuery<Item> query = em.createQuery("SELECT i FROM Item i", Item.class);
dbItems = new ArrayList<Item>(query.getResultList());
em.getTransaction().commit();
预期结果如下所示:
listOfDbItems = server.getDbItems();
listOfUsersItems = server.getPurchasedItems(user);
dlmItems.clear();
int numberOfItemsInDb = listOfDbItems.size();
for (int i = 0; i < numberOfItemsInDb; i++)
{
dlmItems.addElement((listOfDbItems.get(i)).name);
}
第一个类是通过数据库中的持久性实体类创建的,第二个是我创建的。如果我将ArrayList更改为ArrayList dbItems,它会抛出一个错误:找不到适合ArrayList的构造函数。构造函数ArrayList.ArrayListin不适用
谢谢你的帮助 问题是listofBitems.geti返回com.dke.ps.Tables.Item,而dlmItems需要com.dke.ps.Items.Item。您应该更改DefaultListModel dlmItems=new DefaultListModel以接受com.dke.ps.Items.Item,或者在添加到dlmItem之前将Tables.Item对象转换为Items.Item对象。这是com.dke.ps.Shop.Shop.loadItemsShop.java:161?dlmItems.AddElementListofBitems.geti.name上的这一行;DLM的类型是什么?什么是listofBitems.geti.name返回?private DefaultListModel dlmItems=new DefaultListModel;和私有void loadItems{listofBitems=server.getDbItems;listOfUsersItems=server.getPurchasedItemsuser;dlmItems.clear;int numberOfItemsInDb=listofBitems.size;对于int i=0;i
listOfDbItems = server.getDbItems();
listOfUsersItems = server.getPurchasedItems(user);
dlmItems.clear();
int numberOfItemsInDb = listOfDbItems.size();
for (int i = 0; i < numberOfItemsInDb; i++)
{
dlmItems.addElement((listOfDbItems.get(i)).name);
}