Hi, ich wills gar nicht lang halten hier, also gleich zur Sache ^^
Ich habe eine selbstgeschriebene Klasse, vonvder ich ein Objekt mit dem ObjectOutputStream in einer Datei speichern will und dieses Objekt beim starten des Programmes wieder auslesen will.
Klasse hat folgende Struktur
und speichern bzw. wieder einlesen tu ich das ganze so:
ich erhalte folgende Fehlermeldung:
java.io.NotSerializableException: java.awt.image.BufferedImage
wie kann ich dieses Problem umgehen?
Und dazu hab ich noch ein Problem. Wenn ich das BufferedImage weglasse, klappt soweit alles gut. Nur beim einlesen der Daten, wenn ich das Programm dann wieder starte mit der Funktion readMovie()
bekomme ich auch wieder eine Fehlermeldung und weiß nicht wieso...
Fehlermeldung sieht so aus:
Schwerwiegend: null
java.io.EOFException
at java.ibjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2571)
at java.ibjectInputStream.readObject0(ObjectInputStream.java:1315)
at java.ibjectInputStream.readObject(ObjectInputStream.java:369)
at netcontroller.DataSaving.readMovie(DataSaving.java:50)
at netcontroller.NetController.main(NetController.java:191)
wäre super, wenn sich jemand auskennt und weiß was zu tun ist...
danke im Voraus
Ich habe eine selbstgeschriebene Klasse, vonvder ich ein Objekt mit dem ObjectOutputStream in einer Datei speichern will und dieses Objekt beim starten des Programmes wieder auslesen will.
Klasse hat folgende Struktur
Java:
public class Movie implements Serializable
{
String ean;
String title;
String original;
BufferedImage cover;
ArrayList<String> language;
BufferedImage movierating;
String year;
ArrayList<String> actors;
ArrayList<String> genres;
String duration;
String description;
...
}
und speichern bzw. wieder einlesen tu ich das ganze so:
Java:
public class DataSaving {
private static FileOutputStream fos;
private static ObjectOutputStream oos;
private static FileInputStream fis;
private static ObjectInputStream ois;
public DataSaving()
{
try {
fos = new FileOutputStream(".\\data.ini");
oos = new ObjectOutputStream(fos);
fis = new FileInputStream(".\\data.ini");
ois = new ObjectInputStream(fis);
} catch (IOException ex) {
Logger.getLogger(DataSaving.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static void saveMovie(Movie movie)
{
try {
oos.writeObject(movie);
oos.close();
} catch (IOException ex) {
Logger.getLogger(DataSaving.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static Movie readMovie()
{
try {
Object m;
m = ois.readObject();
return (Movie) m;
} catch (IOException | ClassNotFoundException ex) {
Logger.getLogger(DataSaving.class.getName()).log(Level.SEVERE, null, ex);
}
return null;
}
}
ich erhalte folgende Fehlermeldung:
java.io.NotSerializableException: java.awt.image.BufferedImage
wie kann ich dieses Problem umgehen?
Und dazu hab ich noch ein Problem. Wenn ich das BufferedImage weglasse, klappt soweit alles gut. Nur beim einlesen der Daten, wenn ich das Programm dann wieder starte mit der Funktion readMovie()
bekomme ich auch wieder eine Fehlermeldung und weiß nicht wieso...
Java:
new DataSaving();
Movie m = DataSaving.readMovie();
m.showData();
Fehlermeldung sieht so aus:
Schwerwiegend: null
java.io.EOFException
at java.ibjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2571)
at java.ibjectInputStream.readObject0(ObjectInputStream.java:1315)
at java.ibjectInputStream.readObject(ObjectInputStream.java:369)
at netcontroller.DataSaving.readMovie(DataSaving.java:50)
at netcontroller.NetController.main(NetController.java:191)
wäre super, wenn sich jemand auskennt und weiß was zu tun ist...
danke im Voraus