2017-10-17 1 views
0

Ich versuche derzeit, mehrere Instanzen einer Klasse des Typs 'Player' über die Serialisierung zu speichern und zu laden. (Dies ist für eine Aufgabe als Fyi).Speichern und Laden einer Arraylist von Klassen über ObjectInputStream

Die Art, wie der Prozess derzeit funktioniert, ich führe die Klasse über ein ObjectOutputStream.writeObject (Player), dies scheint zu funktionieren, wie ich die Textdatei mit, was scheint, um Daten zu sein.

Das Problem, das ich derzeit habe, ist, wenn ich die Klasse umkehren und laden, ich kann das Objekt nicht zu einem Spielerobjekt werfen, es wirft eine Ausnahme, aber ich bin derzeit nicht kenntnisreich genug, um zu sehen die genaue Ausnahme aus.

Hier finden Sie die Funktionen.

Save-Funktion:

public void savePlayers(ArrayList<Player> p) 
{ 
    FileOutputStream fout = null; 
    ObjectOutputStream oos = null; 
    try 
    { 
     fout = new FileOutputStream("Player.txt"); 
     oos = new ObjectOutputStream(fout); 
     for(Player player: p) 
     { 
      oos.writeObject(p); 
     } 
     fout.close(); 
     oos.close(); 
     } 

    catch(Exception e) 
    { 
     System.out.println("Error is: " + e); 
    } 
    finally 
    { 
     closeStreams(fout, oos); 
    } 

} 

Ladefunktion:

public ArrayList<Player> loadPlayers() 
{ 

    ArrayList<Player> loadedList = new ArrayList<Player>(); 

    FileInputStream fis; 
    ObjectInputStream ois; 

    try 
    { 
     fis = new FileInputStream("Player.txt"); 
     ois = new ObjectInputStream(fis); 

     while(true) 
     { 
      System.out.println("Entered loop"); //testing 
      Object obj = ois.readObject(); 
      System.out.println("Read object done"); //testing 
      Player p = (Player)obj; 
      System.out.println("Casted player"); //The line here doesn't run, prints out error from exception instead and exits loop 
      loadedList.add(p); 
      System.out.println("Loop iterated"); 
     } 
    } 
    catch(EOFException eof) 
    { 

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

Gibt es einen besseren Weg, um die Klassen zu retten? Mache ich etwas falsch beim Casting?

+0

warum nicht Sie die tatsächliche Fehlermeldung aus und sehen, was er sagt? – alfasin

+0

Wie ist der Player definiert? Verschwenden Sie auch keine Ausnahmen –

+0

Whoops! Der Lehrer hatte das eingegeben, um zu sehen, woher der Fehler kam, und ich habe vergessen, es zu ändern, es kommt mit: java.io.WriteAbortedException: Schreiben abgebrochen; java.io.NotSerializableException: australianopen.GameController. Going haben durch diese Klasse zu durchforsten und herauszufinden, was los ist – AidanJH

Antwort

2

Änderung

oos.writeObject(player); 

und dem Moment, Sie schreiben die ganze Arraylist mehrmals

+0

Danke! Ich bekomme jetzt keine Ausnahmen oder Fehler, hoffentlich kann ich den Rest der Spaghetti reparieren und endlich einige Spieler laden! – AidanJH

Verwandte Themen