Da DirectedSparseGraph serializable (javadoc) implementiert, warum kann ich kein Diagramm erstellen, es in eine Datei serialisieren und es dann deserialisieren? Eine "InvalidClassException" wird ausgelöst, wenn deserializer.readObject() mit der Nachricht "no valid constructor" aufgerufen wird.Ist JUNGs DirectedSparseGraph serialisierbar?
Betrachtet man die Javadoc- und Quelldateien, hat es einen Zero-arguments-Konstruktor.
Ist das ein Fehler in der Bibliothek? Oder fehlt mir etwas? Welche Art von Konstruktor erwartet Java?
DirectedSparseGraph graph = new DirectedSparseGraph();
FileOutputStream underlyingStream = new FileOutputStream("output/temp.jung");
ObjectOutputStream serializer = new ObjectOutputStream(underlyingStream);
serializer.writeObject(graph);
serializer.close();
underlyingStream.close();
FileInputStream underlyingStream2 = new FileInputStream("output/temp.jung");
ObjectInputStream deserializer = new ObjectInputStream(underlyingStream2);
DirectedSparseGraph loadedGraph = (DirectedSparseGraph) deserializer.readObject(); //EXCEPTION THROWN HERE
deserializer.close();
underlyingStream2.close();
Ausnahme:
Exception in thread "main" java.io.InvalidClassException: edu.uci.ics.jung.graph.DirectedSparseGraph; edu.uci.ics.jung.graph.DirectedSparseGraph; no valid constructor
at java.io.ObjectStreamClass.checkDeserialize(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at gui.GraphViewer.main(GraphViewer.java:39)
Caused by: java.io.InvalidClassException: edu.uci.ics.jung.graph.DirectedSparseGraph; no valid constructor
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at gui.GraphViewer.main(GraphViewer.java:33)
Haben Sie vor, seine Vertices zu speichern, sie in einer Datei zu speichern und sie später aus dieser Datei in ihren letzten Zustand zu laden? Wenn ja, markieren Sie 'PersistentLayoutDemo.java' in' jung-samples-2.0.1.jar' (mit 'jung-samples-2.0.1-sources.jar'). 'PersistentLayoutImpl.persist()' Methode implementiert 'PersistentLayout.persist()' Interface-Methode und verwendet eine serialisierte 'Point'-Klasse, um die Eckpunkte zu speichern. –