2011-06-08 47 views
1

我試圖用Object輸出流編寫一個文件到一個文件中,並且每當我運行它的代碼時,它都會產生一個NotSerializableException異常。請告訴我,如果你看到我做錯了什麼。NotSerializableException objectIO

保存方法:

public static void saveEntity(PhysicsBody b, File f) throws IOException { 
    if (!f.exists()) 
     f.createNewFile(); 
    ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(f)); 
    oos.writeObject(b); 
    oos.close(); 
} 

錯誤輸出:

java.io.NotSerializableException: PhysicsBody 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.writeObject(Unknown Source) 
at PhysicsUtil.saveEntity(PhysicsUtil.java:15) 
at applet.run(applet.java:51) 
at java.lang.Thread.run(Unknown Source) 

PhysicsBody類:

import java.awt.geom.Point2D; 
import java.util.ArrayList; 

public class PhysicsBody { 

protected float centerX; 
protected float centerY; 
protected float minX, minY, maxX, maxY; 
protected float mass; 
protected ArrayList<Vertex> vertices = new ArrayList<Vertex>(); 
protected ArrayList<Edge> edges = new ArrayList<Edge>(); 

public PhysicsBody(float mass) { 
    this.mass = mass; 
} 

public void addVertex(Vertex v) { 
    if (v != null) 
     vertices.add(v); 
} 

public void addEdge(Edge e) { 
    if (e != null) 
     edges.add(e); 
} 

public MinMax projectToAxis(Point2D.Float axis) { 
    float dotP = axis.x * vertices.get(0).x + axis.y * vertices.get(0).y; 
    MinMax data = new MinMax(dotP, dotP); 

    for (int i = 0; i < vertices.size(); i++) { 
     dotP = axis.x * vertices.get(i).x + axis.y * vertices.get(i).y; 
     data.min = Math.min(data.min, dotP); 
     data.max = Math.max(data.max, dotP); 
    } 
    return data; 
} 

public void calculateCenter() { 
    centerX = centerY = 0; 

    minX = 10000.0f; 
    minY = 10000.0f; 
    maxX = -10000.0f; 
    maxY = -10000.0f; 

    for (int i = 0; i < vertices.size(); i++) { 
     centerX += vertices.get(i).x; 
     centerY += vertices.get(i).y; 

     minX = Math.min(minX, vertices.get(i).x); 
     minY = Math.min(minY, vertices.get(i).y); 
     maxX = Math.max(maxX, vertices.get(i).x); 
     maxY = Math.max(maxY, vertices.get(i).y); 
    } 

    centerX /= vertices.size(); 
    centerY /= vertices.size(); 
} 

} 

回答

2

PhysicsBody必須執行java.io.SerializableVertexEdge也應該實現它。

2

不PhysicsBody實現Serializable?

+0

我使它實現了Serializable,但我仍然得到一個類似的錯誤 – 2011-06-08 23:58:40

+0

@stas:你是否意識到錯誤返回的類名是不可序列化的,而它應該是?是?你現在可以自己解決這些「類似的錯誤」嗎? – BalusC 2011-06-09 00:05:37

相關問題