首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NotSerializableException objectIO

NotSerializableException objectIO
EN

Stack Overflow用户
提问于 2011-06-09 07:55:33
回答 2查看 366关注 0票数 1

我正在尝试使用对象输出流将我创建的对象写入到文件中,每当我运行代码时,它都会引发NotSerializableException。如果你发现我做错了什么,请告诉我。

保存方法:

代码语言:javascript
复制
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();
}

错误输出:

代码语言:javascript
复制
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类:

代码语言:javascript
复制
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();
}

}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-09 08:02:48

PhysicsBody必须实现java.io.SerializableVertexEdge也应该实现它。

票数 2
EN

Stack Overflow用户

发布于 2011-06-09 07:56:53

PhysicsBody实现可序列化了吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6286640

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档