2017-05-29 85 views
0

私はデータベースからアイテムをダウンロードする必要があります方法を実行すると、次のエラーが表示されます。スレッドの例外「AWT-EventQueueの-0」にjava.lang.ClassCastExceptionエラー

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.Tables.Item -

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package com.dke.ps.Tables; 

import java.io.Serializable; 
import javax.persistence.Basic; 
import javax.persistence.Column; 
import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 
import javax.persistence.NamedQueries; 
import javax.persistence.NamedQuery; 
import javax.persistence.Table; 
import javax.xml.bind.annotation.XmlRootElement; 

/** 
* 
* @author michal 
*/ 
@Entity 
@Table(name = "item") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "Item.findAll", query = "SELECT i FROM Item i") 
    , @NamedQuery(name = "Item.findByItemid", query = "SELECT i FROM Item i WHERE i.itemid = :itemid") 
    , @NamedQuery(name = "Item.findByName", query = "SELECT i FROM Item i WHERE i.name = :name") 
    , @NamedQuery(name = "Item.findByDescription", query = "SELECT i FROM Item i WHERE i.description = :description") 
    , @NamedQuery(name = "Item.findByIcon", query = "SELECT i FROM Item i WHERE i.icon = :icon") 
    , @NamedQuery(name = "Item.findByType", query = "SELECT i FROM Item i WHERE i.type = :type") 
    , @NamedQuery(name = "Item.findByPrice", query = "SELECT i FROM Item i WHERE i.price = :price")}) 
public class Item implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "itemid") 
    private Integer itemid; 
    @Column(name = "name") 
    private String name; 
    @Column(name = "description") 
    private String description; 
    @Column(name = "icon") 
    private String icon; 
    @Column(name = "type") 
    private Integer type; 
    @Column(name = "price") 
    private Integer price; 

    public Item() { 
    } 

    public Item(Integer itemid) { 
     this.itemid = itemid; 
    } 

    public Integer getItemid() { 
     return itemid; 
    } 

    public void setItemid(Integer itemid) { 
     this.itemid = itemid; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getDescription() { 
     return description; 
    } 

    public void setDescription(String description) { 
     this.description = description; 
    } 

    public String getIcon() { 
     return icon; 
    } 

    public void setIcon(String icon) { 
     this.icon = icon; 
    } 

    public Integer getType() { 
     return type; 
    } 

    public void setType(Integer type) { 
     this.type = type; 
    } 

    public Integer getPrice() { 
     return price; 
    } 

    public void setPrice(Integer price) { 
     this.price = price; 
    } 

    @Override 
    public int hashCode() { 
     int hash = 0; 
     hash += (itemid != null ? itemid.hashCode() : 0); 
     return hash; 
    } 

    @Override 
    public boolean equals(Object object) { 
     // TODO: Warning - this method won't work in the case the id fields are not set 
     if (!(object instanceof Item)) { 
      return false; 
     } 
     Item other = (Item) object; 
     if ((this.itemid == null && other.itemid != null) || (this.itemid != null && !this.itemid.equals(other.itemid))) { 
      return false; 
     } 
     return true; 
    } 

    @Override 
    public String toString() { 
     return "com.dke.ps.Tables.Item[ itemid=" + itemid + " ]"; 
    } 

} 

そして、私の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; 

} 

あり問題がどこにあるか分かりません。誰も私に例外を説明してもらえますか?

BTW

ザは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(); 

このにおけるexpection表示:

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); 
     } 

最初のクラスが永続性を介して作成された - データベースからのエンティティ・クラス私が作成した2番目のものです。配列リストをArrayList dbItemsに変更した場合、ArrayListに対して適切なコンストラクタが見つかりませんでした。コンストラクタArrayList.ArrayList(int)は使用できません

ありがとうございました!

+0

この行は "com.dke.ps.Shop.Shop.loadItems(Shop.java:161)"ですか? –

+0

dlmItems.addElement((listOfDbItems.get(i))。name); –

+0

"dlmItems"の種類は何ですか? "(listOfDbItems.get(i))。name"とは何ですか? –

答えて

0

「listOfDbItems.get(i)」は「com.dke.ps.Items.Item」を予期しているのに対し、「dlmItems」はcom.dke.ps.Tables.Itemを返します。 dlmItemに追加する前にDefaultListModel dlmItems = new DefaultListModel()を変更してcom.dke.ps.Items.Itemを受け入れるか、Tables.ItemオブジェクトをItems.Itemオブジェクトに変換する必要があります。

関連する問題