我试图使用对象输出流将我制作的对象写入文件,并且每当我运行代码时,它就会引发NotSerializableException。请告诉我您是否明白我做错了。
保存方法:
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(); } }
PhysicsBody必须实施java.io.Serializable。Vertex并Edge应予以实施。
PhysicsBody
java.io.Serializable
Vertex
Edge