Folgendes Problem : Ich schreibe eine Projektdatei, welche ersteinmal eine ganze Reihe von Textinformationen enthält (mit dem ObjectOutputStream als String gespeichert), danach zwei Grafiken im PNG Format. Beim Schreiben tritt kein Fehler auf.
Beim Einlesen werden sowohl die Textinformationen, als auch die erste Grafik fehlerfrei eingelesen. Das zweite Bild wird nicht gelesen und ich bekomme nur eine NULL Referenz zurück.
Hier ist der Code zum Lesen der Projektdatei
Hier ist der Code zum Schreiben der Projektdatei
Ich habe bereits herumprobiert, ob ein zusätzliches close beim Schreiben notwendig sein könnte, das hat aber nichts gebracht :autsch:
Beim Einlesen werden sowohl die Textinformationen, als auch die erste Grafik fehlerfrei eingelesen. Das zweite Bild wird nicht gelesen und ich bekomme nur eine NULL Referenz zurück.
Hier ist der Code zum Lesen der Projektdatei
Java:
public void readFromProject() throws MapFileException {
try {
FileInputStream fis = new FileInputStream(fileName);
ObjectInputStream ois = new ObjectInputStream(fis);
int lines = ois.readInt();
// Liest die Text Zeilen ein
for (int i=0; i<lines; i++) {
String line = (String)ois.readObject();
String[] l = Parser.parseString(line,'~');
// Auf korrektes Token testen
if (l[0].equals(MapFileHandler.TOKEN_BACKGROUND_FILE)) {
background = l[1];
}
if (l[0].equals(MapFileHandler.TOKEN_FOREGROUND_FILE)) {
foreground = l[1];
}
if (l[0].equals(MapFileHandler.TOKEN_DESCRIPTION)) {
description = l[1];
}
if (l[0].equals(MapFileHandler.TOKEN_MASK)) {
// Die eigentliche Maske wird später erstellt
maskList.add(line);
}
if (l[0].equals(MapFileHandler.TOKEN_PART)) {
// Parts werden erst erstellt, nachdem die gesamte Masken Liste geladen wurde
partList.add(line);
}
if (l[0].equals(MapFileHandler.TOKEN_TEXT)) {
// Parts werden erst erstellt, nachdem die gesamte Masken Liste geladen wurde
textList.add(line);
}
if (l[0].equals(MapFileHandler.TOKEN_PROJECT_FOLDER)) {
projectFolder = l[1];
}
if (l[0].equals(MapFileHandler.TOKEN_SIZE)) {
width = l[1];
height = l[2];
}
if (l[0].equals(MapFileHandler.TOKEN_TITLE)) {
title = l[1];
}
}
// Liest die Images ein
ImageInputStream ios = ImageIO.createImageInputStream(fis);
BufferedImage test = null;
test = ImageIO.read(ios);
if (test == null)
throw new MapFileException("Background nicht geladen");
model.setBackground(test);
test = null;
test = ImageIO.read(ios);
if (test == null)
throw new MapFileException("Foreground nicht geladen");
model.setForeground(test);
fis.close();
} catch (Exception e) {
e.printStackTrace();
throw new MapFileException("Konnte das Projekt nicht laden");
}
}
Hier ist der Code zum Schreiben der Projektdatei
Java:
protected void saveToProject() throws MapFileException {
// Schreibt die eigentliche Projektdatei
try {
FileOutputStream fos = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(fos);
// Schreibt die Texturellen Informationen
// Schreibt die Anzahl Zeilen
int lines = 6 + maskList.size() + textList.size() + partList.size();
oos.writeInt(lines);
oos.writeObject(title);
oos.writeObject(description);
oos.writeObject(size);
oos.writeObject(projectFolderToken);
oos.writeObject(foreground);
oos.writeObject(background);
for (int i=0; i<maskList.size(); i++) {
oos.writeObject(maskList.get(i));
}
for (int i=0; i<partList.size(); i++) {
oos.writeObject(partList.get(i));
}
for (int i=0; i<textList.size(); i++) {
oos.writeObject(textList.get(i));
}
// Schreibt Hintergrund und Vordergrund Layer in den Stream
ImageOutputStream ios = ImageIO.createImageOutputStream(fos);
boolean b = ImageIO.write(model.getBackgroundLayer(), "png", ios);
if (!b)
throw new MapFileException("Konnte Background Layer nicht speichern.");
b = ImageIO.write(model.getForegroundLayer(), "png", ios);
if (!b)
throw new MapFileException("Konnte Foreground Layer nicht speichern.");
fos.close();
} catch (Exception e) {
e.printStackTrace();
throw new MapFileException("Konnte Projekt nicht speichern");
}
}
Ich habe bereits herumprobiert, ob ein zusätzliches close beim Schreiben notwendig sein könnte, das hat aber nichts gebracht :autsch: