Exception 不可序列化异常

Exception 不可序列化异常,exception,jsp,serialization,vector,Exception,Jsp,Serialization,Vector,我正在尝试为uni项目创建一个模拟购物车。im使用两个java类Item和shoppingCart,shoppingCart使用一个向量来存储项目,然后将它们写入文件。我试图使用jsp页面上的类,但当我试图写入文件时,我得到了一个java.io.WriteableOrtedException:写入中止;java.io.NotSerializableException:cart.Item。。。有什么办法可以解决这个问题吗???来自NotSerializableException上的javadoc。

我正在尝试为uni项目创建一个模拟购物车。im使用两个java类Item和shoppingCart,shoppingCart使用一个向量来存储项目,然后将它们写入文件。我试图使用jsp页面上的类,但当我试图写入文件时,我得到了一个java.io.WriteableOrtedException:写入中止;java.io.NotSerializableException:cart.Item。。。有什么办法可以解决这个问题吗???

来自NotSerializableException上的javadoc。。。“当实例需要具有可序列化接口时引发。”


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

这里是一个小示例

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();


    }

}

要避免NotSerializableException,请确保:

  • 您的类实现了可序列化
  • 所有非基本成员实现可序列化(或是暂时的)
  • 如果您的类是一个内部类,那么它要么是静态的,要么是外部类实现的 可序列化
  • 除此之外,还需要为每个可序列化类定义serialVersionUID。检查上述所有3种情况,并加上:

  • 所有可序列化的超类
  • 如果您的类是一个匿名类,请在那里定义它
  • 注意:您的代码有时可能在没有serialVersionUID的情况下运行,但要理解为什么这将是一个问题,具体取决于环境


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

    -Dsun.io.serialization.extendedDebugInfo=true
    

    您可以添加它需要一个“serialVersionUID”才能序列化。我尝试在两个类上实现Serializable,但没有luckDoes项包含任何不可序列化的成员?否则,我会再次检查您是否确实实现了java.io.Serializable。至于serialVersionUID,您应该拥有它,但是如果您不提供它,它不会导致NotSerializableException(运行时将在需要时自动计算版本ID)。