Witam
pisze właśnie program korzystający z bazy na MySQL, wszystkie operacje na bazie wykonuję za pomocą JPA. Wszystko szło w miarę ok dopóki nie potrzebowałem wyświetlić danych w JTable. Podczas ładowania danych do własnego modelu tabeli wyskakuje błąd:
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to Tabela.Packing at Tabela.ModelTabeli.getValueAt(ModelTabeli.java:36)
błąd dotyczy linijki:
Packing p = (Packing) dane.get(rowIndex)
poniżej wszystkie klasy z których korzystam
klasa Packing
public class Packing {
private String itemName;
private String itemCode;
private String certificateCode;
private int itemQuantity;
public void Packing()
{
}
@Override
public String toString() {
return "Packing{" + "itemName=" + itemName + ", itemCode=" + itemCode + ", certificateCode=" + certificateCode + ", itemQuantity=" + itemQuantity + '}';
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getItemCode() {
return itemCode;
}
public void setItemCode(String itemCode) {
this.itemCode = itemCode;
}
public String getCertificateCode() {
return certificateCode;
}
public void setCertificateCode(String certificateCode) {
this.certificateCode = certificateCode;
}
public int getItemQuantity() {
return itemQuantity;
}
public void setItemQuantity(int itemQuantity) {
this.itemQuantity = itemQuantity;
}
}
klasa Select
public class Select {
private static final String PERSISTENCE_UNIT_NAME = "TabelaPU";
private EntityManagerFactory factory;
EntityManager em = null;
public List<Packing> Select(int id)
{
List<Packing> dane = null;
try
{
factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
em = factory.createEntityManager();
em.getTransaction().begin();
Query query = em.createQuery("SELECT pi.itemName, pi.itemCode, pi.certificateCode, "
+ "pi.itemQuantity FROM PackingItem pi");
dane = query.getResultList();
}
catch(Exception e)
{
e.printStackTrace();
}
return dane;
}
}
klasa ModelTabeli
public class ModelTabeli extends AbstractTableModel{
private List<Packing> dane = null;
final static Object[] columns = {"Item", "Index", "Certyfikat", "Ilość"};
public ModelTabeli(){}
@Override
public int getRowCount() {
if(dane==null) return 0;
return dane.size();
}
@Override
public int getColumnCount() {
return columns.length;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
if(dane==null) return null;
Packing p = (Packing) dane.get(rowIndex); //linijka gdzie program się wysypuje
switch(columnIndex){
case 0:
return p.getItemName();
case 1:
return p.getItemCode();
case 2:
return p.getCertificateCode();
case 3:
return p.getItemQuantity();
default:
return p;
}
}
@Override
public boolean isCellEditable(int row, int column) {
return false;
}
public void setModelData(List<Packing> packing) {
this.dane = packing;
}
public Packing getPacking(int position) {
return dane.get(position);
}
@Override
public String getColumnName(int column) {
return columns[column].toString();
}
}
fragment kodu spod guzika, który powinien wyświetlać dane w tabeli:
Select s = new Select();
List<Packing> dane = new ArrayList<Packing>();
dane = s.Select();
ModelTabeli mt = new ModelTabeli();
mt.setModelData(dane);
jTable1.setModel(mt);
czy orientuje się ktoś co tu jest nie tak i jak by to można poprawić żeby działało poprawnie?