Avatar billede junkfunk2002 Nybegynder
11. december 2002 - 16:18 Der er 4 kommentarer og
1 løsning

Serializable bliver min skæbne

Ja, nu har jeg så kæmpet med at serialize en klasse i alt for lang tid. Det er ingen problemer med at skrive objektet, men jeg får en IOException når jeg vil læse objektet igen! Hvad gør jeg galt?
public void loadUserDataBase() {
try {

myUserDataBase = getUserDataBase();

}   
} catch (IOException e) {
System.out.println("IOException");
} catch (ClassNotFoundException e) {
System.out.println("no file on harddisk");
}
       
}

    public void saveUserDataBase() {
           
        try {
               
        putUserDataBase(myUserDataBase);
    System.out.println("UserDataBasen er Gemt");
        } catch (IOException e) {
    System.out.println("Could not save userDataBase");
            }
        }
   
}

-----------------------------------------------------------

import java.io.*;


public class SerializedUserDataBaseFile extends SerializedObjectFile {
   

    public SerializedUserDataBaseFile(String filename) {
        super(filename);
    }
   
   
    public void putUserDataBase(UserDataBase myUserDataBase) throws IOException {
        putObject(myUserDataBase);
    }
   
   
   
    public UserDataBase getUserDataBase() throws IOException, ClassNotFoundException {
       
        getObject();
        if (getObject() == null) {
            return null;
        }
        return (UserDataBase) getObject();
    }
    }
-----------------------------------------------------------
import java.io.*;

public class SerializedObjectFile {

    final protected String filename;

    public SerializedObjectFile(String filename) {
        this.filename = filename;
    }
   
protected void putObject(Serializable myUserDataBase) throws IOException {
               
    FileOutputStream outStream;
    ObjectOutputStream objStream;
    outStream = new FileOutputStream(filename);
    objStream = new ObjectOutputStream(outStream);
    objStream.writeObject(myUserDataBase);
    objStream.flush();
    objStream.close();
    }
   

protected Object getObject() throws IOException, ClassNotFoundException {
        try {
           
    Object myObject;
    FileInputStream inStream;
    ObjectInputStream objStream;
    inStream = new FileInputStream(filename);
    objStream = new ObjectInputStream(inStream);
    myObject = (UserDataBase) objStream.readObject();
    objStream.close();
    return (UserDataBase) myObject;
        }
        catch (FileNotFoundException e) {
        System.out.println("!no such file!");
            return null;
           
        }
    }
}
-----------------------------------------------------------
Avatar billede arne_v Ekspert
11. december 2002 - 16:24 #1
Prøv lige og erstat:

} catch (IOException e) {
System.out.println("IOException");

med:

} catch (IOException e) {
System.out.println(e);

eller:

} catch (IOException e) {
e.printStackTrace();

så kan vi nemlig se, hvad det er for en fejl du får !
Avatar billede junkfunk2002 Nybegynder
11. december 2002 - 16:27 #2
Jeg får denne exception
java.io.InvalidClassException: GUIController; no valid constructor
Avatar billede junkfunk2002 Nybegynder
11. december 2002 - 16:33 #3
Skal metoden getUserDataBase kaldes fra den klasse som skal serialiseres eller er det ligemeget?
Avatar billede arne_v Ekspert
11. december 2002 - 16:38 #4
Den siger, at I forsøger at deserialisere/læse en
GUIController og at GUIController ikke har en constructor
uden argumenter.

[hvilket den så altså tilsyneladende skal have]
Avatar billede junkfunk2002 Nybegynder
11. december 2002 - 16:40 #5
jeg tror problemet er løst!
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester