[Java] Serializable Line2D

Pagina: 1
Acties:

  • MethinX
  • Registratie: September 2000
  • Laatst online: 02-05 11:30

MethinX

't is wat!

Topicstarter
Ik ben met een een gedeelte van een programma bezig waarin je een circuit kunt tekenen door allemaal lijnen te tekenen van het type Line2D. Deze lijnen worden in een Vector opgeslagen in mijn klasse Circuit.

Deze lijnen wil ik opslaan door deze klasse Serializable te maken, echt dit lukt niet. Line2D werkt met Point2D, als ik deze ga saven worden de goede punten gebruikt. Als ik deze weer probeer te loaden krijg ik alleen 0 punten:
code:
1
2
3
4
5
Circuit saved
 - Point2D.Double[224.0, 251.0]Point2D.Double[307.0, 343.0]

Circuit loaded
 - Point2D.Double[0.0, 0.0]Point2D.Double[0.0, 0.0]

Weet iemand hoe dit komt? Heeft het te maken met dat Point2D niet Serializable is ofzo?

Ik maak gebruik van deze load en save methode:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
 /**
   * Save circuit to textfile
   * @param filename The circuit is written to this file
   */
  public void save(String filename)
  {
    try
    {
      FileOutputStream fos = new FileOutputStream(filename);
      ObjectOutputStream oos = new ObjectOutputStream(fos);
      oos.writeObject(circuit);
      oos.close();
      System.out.println("Circuit saved");
    }
    catch (Exception e)
    {
      System.out.println("Exception try to save circuit: " + e);
    }
  }

 /**
   * load circuit from textfile
   * @param filename The circuit loaded from this file
   */
  public void load(String filename)
  {
    try
    {
      FileInputStream fos = new FileInputStream(filename);
      ObjectInputStream ios = new ObjectInputStream(fos);
      circuit = (SCircuit)ios.readObject();
      ios.close();
      System.out.println("Circuit loaded");
    }
    catch (Exception e)
    {
      System.out.println("Exception try to load: " + e);
    }
  }

Je moet doen wat je niet laten kunt, en laten wat je niet doen kunt.


  • JeroenTheStig
  • Registratie: Mei 2000
  • Laatst online: 22:05
zou je de code van je klasse Circuit eens willen posten?

  • voodooless
  • Registratie: Januari 2002
  • Laatst online: 18:49

voodooless

Sound is no voodoo!

Heeft het te maken met dat Point2D niet Serializable is ofzo?
Je slaat de spijker precies op zijn kop :). Extend de klasse Point2D en maakt twee extra methodes:

Java:
1
2
3
4
5
private void writeObject(java.io.ObjectOutputStream out)
     throws IOException
 private void readObject(java.io.ObjectInputStream in)
     throws IOException, ClassNotFoundException;
 


implementeer deze, en dan zou het moeten werken... Check anders ff de docs om te zien hoe het precies werkt..

Do diamonds shine on the dark side of the moon :?


  • MethinX
  • Registratie: September 2000
  • Laatst online: 02-05 11:30

MethinX

't is wat!

Topicstarter
Thnx het werkt!!

Ik heb een klasse gemaakt die extend van Line2D, en die methodes als volgt geimplementeerd:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
  private void writeObject(java.io.ObjectOutputStream out) 
  throws IOException
  {
    out.writeDouble(getP1().getX());
    out.writeDouble(getP1().getY());
    out.writeDouble(getP2().getX());
    out.writeDouble(getP2().getY());
  }

  private void readObject(java.io.ObjectInputStream in) 
  throws IOException, ClassNotFoundException
  {
    double x1 = (double)in.readDouble();
    double y1 = (double)in.readDouble();
    double x2 = (double)in.readDouble();
    double y2 = (double)in.readDouble();
    setLine(x1,y1,x2,y2);
  }

Je moet doen wat je niet laten kunt, en laten wat je niet doen kunt.