不可序列化的例外

时间:2009-05-05 07:02:22

标签: exception jsp serialization vector

我正在尝试为uni项目创建一个模拟购物车。我使用两个java类Item和shoppingCart,购物车使用向量来存储Items,然后将它们写入文件。我试图在jsp页面上使用这些类但是当我尝试写入该文件时,我得到一个java.io.WriteAbortedException:写入已中止; java.io.NotSerializableException:cart.Item ...任何想法如何解决这个问题?

3 个答案:

答案 0 :(得分:2)

来自NotSerializableException上的javadoc ...“当需要一个实例具有Seri​​alizable接口时抛出。”

这意味着您要序列化的类需要实现Serializable标记接口。

答案 1 :(得分:0)

这是给你的一个小例子......

import java.io.*;

class player implements Serializable{
    String name;
    double health;
    double positionX;
    double positionY;
    int weapon;     
}


class game{
    public static void main(String[] args) throws Exception{

        player character1 = new player();
        character1.name = "Inukz";
        character1.health = 82.62;
        character1.positionX = 80;
        character1.positionY = 33;
        character1.weapon = 2;

        player character2 = new player();
        character2.name = "Prasad";
        character2.health = 32.62;
        character2.positionX = 40;
        character2.positionY = 63;
        character2.weapon = 3;


        player character3 = new player();
        character3.name = "Thilan";
        character3.health = 12.62;
        character3.positionX = 10;
        character3.positionY = 83;
        character3.weapon = 1;



        FileOutputStream fileStream = new FileOutputStream("myGame.js",true);
        ObjectOutputStream os = new ObjectOutputStream(fileStream);

        os.writeObject(character1);


        os.close();


    }

}

答案 2 :(得分:0)

要避免NotSerializableException,请确保:

  1. 您的班级实施Serializable
  2. 所有非原始成员实现Serializable(或者是瞬态)
  3. 如果你的班级是内部班级,那么它是静态的还是外部类的实现 序列化
  4. 除此之外,您还需要为每个Serializable类定义 serialVersionUID 。检查以上所有3个案例加上:

    1. 所有可序列化超类
    2. 如果您的班级是匿名班级,也可以在那里定义
    3. 注意:您的代码有时可以在没有serialVersionUID的情况下运行,但read the last paragraph in Serializable's javadoc可以了解为什么它会成为问题,具体取决于环境。


      有一个VM选项可以向异常添加详细信息。它显示了无法序列化的根和嵌套类:

      -Dsun.io.serialization.extendedDebugInfo=true