02. december 2007 - 10:31Der er
38 kommentarer og 1 løsning
Problem med serialisering og GUI
Hej.
Jeg er løbet ind i et problem med at hente data fra den fil jeg har dannet ved hjælp af serialisering og håber på at der er nogle af jer der kan fortælle mig hvad der er gået galt og hvad jeg kan gøre for at få det til at virke.
} catch (Exception e) { jTextArea1.setText( "Ingen liste er tilgængelig"); e.printStackTrace(); }
Når jeg afvikler programmet og forsøger at hente data i filen Filmkartotek.ser får jeg denne fejl:
java.lang.ClassCastException: java.lang.Integer cannot be cast to dvdkartotek.Kartotek at dvdkartotek.GrafiskMain.jButton2ActionPerformed(GrafiskMain.java:154) at dvdkartotek.GrafiskMain.access$100(GrafiskMain.java:16) at dvdkartotek.GrafiskMain$2.actionPerformed(GrafiskMain.java:80) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) at java.awt.Component.processMouseEvent(Component.java:6038) at javax.swing.JComponent.processMouseEvent(JComponent.java:3265) at java.awt.Component.processEvent(Component.java:5803) at java.awt.Container.processEvent(Container.java:2058) at java.awt.Component.dispatchEventImpl(Component.java:4410) at java.awt.Container.dispatchEventImpl(Container.java:2116) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4322) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3986) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3916) at java.awt.Container.dispatchEventImpl(Container.java:2102) at java.awt.Window.dispatchEventImpl(Window.java:2429) at java.awt.Component.dispatchEvent(Component.java:4240) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:273) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:183) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:173) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:168) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:160) at java.awt.EventDispatchThread.run(EventDispatchThread.java:121)
Hvad hulen betyder det? Er det fordi jeg forsøger at hente et objekt af typen integer ind i en string?
Skriv gerne hvad jeg kan gøre for at løse problemet, for jeg er simpelthen løbet ind i en mur her. Skriv også gerne hvorfor det skal gøres som det nu skal, for det vil hjælpe mig meget :O)
linie 154 er: mineFilm = (Kartotek) Serialisering.hent("Filmkartotek.ser"); linie 16 er: public class GrafiskMain extends javax.swing.JFrame { linie 80 er: public void actionPerformed(java.awt.event.ActionEvent evt) { jButton2ActionPerformed(evt);
/* * Kartotek.java * * Created on 28. november 2007, 19:31 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */
package dvdkartotek;
import java.util.ArrayList;
/** * * @author Administrator */ public class Kartotek {
/** Creates a new instance of Kartotek */ public Kartotek() { }
public Kartotek( String kartoteksNavn ) { setKartoteksNavn( kartoteksNavn ); dvdFilm = new ArrayList(); }
public String getKartoteksNavn() { return kartoteksNavn; }
public void setKartoteksNavn(String kartoteksNavn) { this.kartoteksNavn = kartoteksNavn; }
public ArrayList getDvdFilm() { return dvdFilm; }
public void setDvdFilm(ArrayList dvdFilm) { this.dvdFilm = dvdFilm; }
public void addFilm( Film film ) { dvdFilm.add( film ); }
public String toString() { return "Navn på kartotek: " + kartoteksNavn + "\n\n" + dvdFilm.toString(); } }
Som du kan se indeholder den ikke andet end navnet på mit DVD kartotek samt min ArrayListe. Kan det være fordi jeg ikke har importeret Serialiseringen i denne klasse?
/* * Film.java * * Created on 28. november 2007, 19:26 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */
package dvdkartotek;
import java.io.*;
/** * * @author Administrator */ public class Film implements Serializable {
private int nummer = -1; private String titel = " "; private String genre = " "; private double spilletid = -1;
/** Creates a new instance of Film */ public Film() { }
public Film( int nummer, String titel, String genre, double spilletid ) { setNummer( nummer ); setTitel( titel ); setGenre( genre ); setSpilletid( spilletid ); }
public int getNummer() { return nummer; }
public void setNummer(int nummer) { this.nummer = nummer; }
public String getTitel() { return titel; }
public void setTitel(String titel) { this.titel = titel; }
public String getGenre() { return genre; }
public void setGenre(String genre) { this.genre = genre; }
public double getSpilletid() { return spilletid; }
public void setSpilletid(double spilletid) { this.spilletid = spilletid; }
public String toString() { return "DVD nummer: " + nummer + "\nTitel: " + titel + "\nGenre: " + genre + "\nSpilletid: " + spilletid + "\n\n"; }
Har lavet hent() om men den kommer stadig med samme fejl :(
init: deps-jar: Compiling 1 source file to C:\Documents and Settings\Administrator\Opgave4\build\classes compile-single: run-single: Ingen liste er tilgængelig java.lang.ClassCastException: java.lang.Integer cannot be cast to dvdkartotek.Kartotek at dvdkartotek.Main.main(Main.java:36) BUILD SUCCESSFUL (total time: 0 seconds)
Nummer 36 i Main er :
mineFilm = (Kartotek) objektstrøm.readObject();
Hvad jeg kan se er det et eller andet galt i forbindelse med importen af ArrayListen.
mineFilm er det jeg har "døbt" min ArrayListe og Kartotek er min klasse.
FilmKartotek.ser eksisterer for jeg kan se den er dannet i min projekt mappe og når jeg åbner mit program og tilføjer film til min ArrayListe så skriver den skamp også fint nok til filen (kan se at ændretdato ændre sig når jeg tilføjer noget i min liste).
java.lang.ClassCastException: java.lang.Integer cannot be cast to dvdkartotek.Kartotek at dvdkartotek.Main.main(Main.java:36)
Det første der indlæses i min ArrayListe er:
int nummer og det første i min ArrayListe og det er vel der det går galt når den skal indlæses til mit jTextArea1
Er det fordi mine int og double skal konverteres til String inden de indlæses i mit felt??
Hvis jeg indsætter denne kode i min hent() kommer der ikke en fejl ud med noget udover den sædvanlige..
init: deps-jar: Compiling 1 source file to C:\Documents and Settings\Administrator\Opgave4\build\classes compile-single: run-single: Ingen liste er tilgængelig java.lang.ClassCastException: java.lang.Integer cannot be cast to dvdkartotek.Kartotek at dvdkartotek.Main.main(Main.java:36) BUILD SUCCESSFUL (total time: 0 seconds)
Det er mere fordi jeg har arbejdet i mit GUI og ikke i main :)
Nu er koden i min main:
/* * Main.java * * Created on 28. november 2007, 19:26 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */
objektstrøm.close(); } catch ( Exception e) { System.out.println( "Ingen liste er tilgængelig"); e.printStackTrace(); }
System.out.println( mineFilm.toString() ); }
}
og output ser sådan ud:
init: deps-jar: Compiling 1 source file to C:\Documents and Settings\Administrator\Opgave4\build\classes compile-single: run-single: I read a java.lang.Integer Ingen liste er tilgængelig java.lang.ClassCastException: java.lang.Integer cannot be cast to dvdkartotek.Kartotek at dvdkartotek.Main.main(Main.java:36) Navn på kartotek: mine film
Kan det være fordi første felt i filen FilmKartotek.ser er en int og i min Kartoteks klasse beder jeg at få hentet kartoteksNavn først og herefter min dvdFilm.toString()
public String toString() { return "Navn på kartotek: " + kartoteksNavn + "\n\n" + dvdFilm.toString(); }
Klassen hvor jeg skriver og gemmer filen hedder Serealisering og koden ser sådan ud:
/* * Serialisering.java * * Created on 28. november 2007, 19:52 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.