Liebe Leute,
ich schreibe für die Uni gerade ein Programm, das über eine verschachtelte Datenstruktur verfügt: eine ArrayList<Node> speichert Nodes, die Circles oder Rects sein können und über eine ArrayList<Edge> als Instanzvariable verfügen, die wiederum Edges speichert, die auf andere Nodes verweisen - andere als die Node, deren ArrayList<Edge> den aktuellen Edge enthält. Der Verweis des Edge auf "seine" Node erfolgt dabei per int auf die Position der betreffenden Node in der ArrayList<Node> (es gibt also keinen Zirkelverweis per Referenzvariablen zwischen Node, ArrayList<Edge> und Edge). Die Kinder der Nodes (Circles oder Rects) sowie die diese verbindenden Edges werden als JPanels auf einem großen JPanel dargestellt.
Nun soll das Ganze (zur internen und externen Speicherung) serialisiert (und deserialisiert) werden. Geht das mittels einfacher Serialisierung, der ich meine ArrayList<Node> füttere? Es gibt in der Datenstruktur ja durchgängig Verweise von Objekten der einen Klasse auf Objekte der nächsten Klasse. Allerdings sind diese Verweise nicht unbedingt Instanzvariablen, sondern im Fall der ArrayLists generische Parameter. Gibt es da bekannte Serialisierungsprobleme (und natürlich -lösungen)?
Ich habs bislang (lang) vergeblich versucht und bekomme beim Serialisieren zwar keine Fehlermeldung, aber ein höchst seltsames Verhalten der Nodes. Sie lassen sich nur noch einmal von nicht-markiert nach markiert schalten, nicht mehr bewegen und nicht mehr als Ziel für Edges auswählen. (Löschen lassen sie sich auch nicht mehr, aber das muss man nicht überbewerten, da meine Löschmethode (wegen der ArrayList über einen Iterator) auch im Zustand vor der Serialisierung noch einen Bug hat.)
Soweit ich sehe, ists kein Problem mit einer durch die Serialisierung zurückgesetzten statischen Variable, und ich vermute eher, dass die Serialisierung selbst das Problem ist. Kann mir jemand sagen, wie ich das prüfen kann? (Ich schreibe in ein byte[].)
Bei Bedarf kann ich natürlich Code liefern, aber bevor ich 1000 Zeilen Code aufs Nötigste eindampfe, wollte ich zunächst einmal nur mit einer Problembeschreibung in die Runde fragen.
Merci für die Antworten.
ich schreibe für die Uni gerade ein Programm, das über eine verschachtelte Datenstruktur verfügt: eine ArrayList<Node> speichert Nodes, die Circles oder Rects sein können und über eine ArrayList<Edge> als Instanzvariable verfügen, die wiederum Edges speichert, die auf andere Nodes verweisen - andere als die Node, deren ArrayList<Edge> den aktuellen Edge enthält. Der Verweis des Edge auf "seine" Node erfolgt dabei per int auf die Position der betreffenden Node in der ArrayList<Node> (es gibt also keinen Zirkelverweis per Referenzvariablen zwischen Node, ArrayList<Edge> und Edge). Die Kinder der Nodes (Circles oder Rects) sowie die diese verbindenden Edges werden als JPanels auf einem großen JPanel dargestellt.
Nun soll das Ganze (zur internen und externen Speicherung) serialisiert (und deserialisiert) werden. Geht das mittels einfacher Serialisierung, der ich meine ArrayList<Node> füttere? Es gibt in der Datenstruktur ja durchgängig Verweise von Objekten der einen Klasse auf Objekte der nächsten Klasse. Allerdings sind diese Verweise nicht unbedingt Instanzvariablen, sondern im Fall der ArrayLists generische Parameter. Gibt es da bekannte Serialisierungsprobleme (und natürlich -lösungen)?
Ich habs bislang (lang) vergeblich versucht und bekomme beim Serialisieren zwar keine Fehlermeldung, aber ein höchst seltsames Verhalten der Nodes. Sie lassen sich nur noch einmal von nicht-markiert nach markiert schalten, nicht mehr bewegen und nicht mehr als Ziel für Edges auswählen. (Löschen lassen sie sich auch nicht mehr, aber das muss man nicht überbewerten, da meine Löschmethode (wegen der ArrayList über einen Iterator) auch im Zustand vor der Serialisierung noch einen Bug hat.)
Soweit ich sehe, ists kein Problem mit einer durch die Serialisierung zurückgesetzten statischen Variable, und ich vermute eher, dass die Serialisierung selbst das Problem ist. Kann mir jemand sagen, wie ich das prüfen kann? (Ich schreibe in ein byte[].)
Bei Bedarf kann ich natürlich Code liefern, aber bevor ich 1000 Zeilen Code aufs Nötigste eindampfe, wollte ich zunächst einmal nur mit einer Problembeschreibung in die Runde fragen.
Merci für die Antworten.