FileOutput/Input Objekte

florian.

Mitglied
Hallo,

ich arbeite zur Zeit an einem TippSpiel-Programm, dass, wenn man es beendet alle bekannten Spieler (die tippen) und alle bekannte Spiele (für die getippt wird) per FileOutputStream jeweils als ArrayList speichert.

Nun habe ich eine Frage (ich suche nach einem Fehler, und möchte wissen ob das die Ursache sein könnte):

Es gibt wie gesagt die ArrayList<Spiel> alleSpiele und die ArrayList<Spieler> alleSpieler, die gespeichert werden. Wenn ich die Datei wieder lade (FileInpuStream) werden in beiden Klassen (Spiel und Spieler) die entsprechenden statischen Variablen per Setter-Methode eingestellt.
Der Fehler/das Problem liegt hier: man muss sich für Spiele (für die man tippen möchte) als Spieler anmelden. Dabei werden für jedes Spiel (aus der statischen Variable der Klasse Spiel), für das der Spieler noch nicht angemeldet ist, JButtons angezeigt.
Beim Neustart des Programms (wenn die oben genannten Objekte wieder geladen werden) werden alle Spiele, obwohl der Spieler dafür angemeldet ist, nochmals bei der Spielanmeldung angezeigt.

Meine Vermutung ist, dass, da die Spiele (Referenzen), für die ein Spieler angemeldet ist, mit der ArrayList<Spieler> serialisiert werden (als Instanzvariablen für die Spieler) bei der Deserialisierung nicht auf mehr die gleichen Objekte auf dem Heap zeigen wie die gespeicherten Spiele in der ArrayList<Spiel> alleSpiele. Somit kann ich nicht mehr sagen:
Java:
if(angemeldeterSpieler.getSpiele().contains(spielAusArrayList)) //nur true wenn gleiches Objekt auf Heap (?)
{
//JButtons erstellen für Anmeldung
}

Wenn die Referenzen nicht mehr auf das selbe Objekt auf dem Heap zeigen, wie bekomm ich das hin ?

Ich hoffe ich konnte das Problem ausreichend gut schildern und ihr könnt mir weiterhelfen.
Danke schonmal !
 
Zuletzt bearbeitet:
statischen Variable ?!

weil ? was für Variablen ? was referenzieren diese Variablen ?

Da würde ich mal anfangen zu suchen 😉

Du sprichst von Instanzvariablen , wenn du diese allerdings als statisch deklarierst gelten sie für alle Instanzen deiner Klasse, sollte dies nun ein boolscher Wert sein der darstellt ob jemand angemeldet ist , und dieser steht auf false, ist klar das dann eben alle Spieler nicht angemeldet sind 🙂
 
Zuletzt bearbeitet:
Hallo,
das ist nicht das Problem, das Problem ist, dass 2 verschiedene Referenzvariablen für Spiel-Objekte serialisiert werden (in ArrayLists) und sie später nach der Deserialisierung eventuell (? -> das ist die Frage) nicht mehr das gleiche Objekt auf dem Heap referenzieren.
Gruß
 
Zuletzt bearbeitet:
Du Serialisierst ja aber die Arraylist inclusive der Objekte, eigentlich sollten dann die Zustände auch dementsprechend wieder hergestellt werden , poste den Abschnitt mit welchem du Deine Listen Serialisiert bitte.
 
🙂 war ein dummer Fehler: 😳
ich hab testweise eine Testmethode gemacht, in der 3 Spiele erstellt werden. Diese Methode wird bei jedem Start in der Main-Methode aufgerufen. Somit gab es die Spiele dann nach 2 Starts doppelt...
:lol:
Danke trotzdem für deine Hilfe
 

Neue Themen


Zurück
Oben