【问题标题】:why I'm getting NotSerializableException exception though I've implemented 'Serializable'为什么我得到了 NotSerializableException 异常,虽然我已经实现了'Serializable'
【发布时间】:2013-11-20 22:18:52
【问题描述】:

我已经在“userInfo”类中实现了 Serializable。仍然我得到例外。这是输出控制台 -

java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: chatservernazmus.User
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1333)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        at java.util.ArrayList.readObject(ArrayList.java:593)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at java.io.ObjectStreamClass.invokeReadObject(ObjectStreamClass.java:974)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1849)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
        at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        at chatservernazmus.Server.getAllUser(Server.java:74)
        at chatservernazmus.Server.<init>(Server.java:44)
        at chatservernazmus.Main.main(Main.java:11)

这是我的两个课程:

public class userInfo implements Serializable{
    public ArrayList<User> allUser=new ArrayList<User>();

    public void addUser(User e){
        allUser.add(e);
    }
    public ArrayList<User> getAllUser(){
     return allUser;
    }
}


public class User{
    public String userName="";
    public String password="";
    public String statusMessage="";
    public ArrayList<String> friend=new ArrayList<String>();
    public ArrayList<String>offlineMessage=new ArrayList<String>();

    public User(String username,String password,String message){
        userName=username;
        password=password;
        statusMessage=message;
    }

    public void setStatusMessage(String message){
        statusMessage=message;
    }
    public void addFriend(String fr){
        friend.add(fr);
    }
    public ArrayList<String> getOfflineMessage(){
        ArrayList<String> str=new ArrayList<String>();
        offlineMessage.clear();
        return str;
    }
}

【问题讨论】:

  • 你应该提供一些你得到错误的代码
  • 你在类User上实现了吗?错误状态!我不知道'userInfo'是否是用户
  • 检查堆栈跟踪中提到的最后两行的所有对象。
  • 检查 Server.java 第 44 行但真的没有代码?!?!让我们看看一些代码
  • 这是我的两个课程paste.ubuntu.com/6450698

标签: java file exception serialization


【解决方案1】:

为什么我得到了 NotSerializableException 异常,尽管我已经实现了“Serializable”

你没有。

java.io.NotSerializableException: chatservernazmus.User 公共类 userInfo 实现 Serializable{ 公共类用户{

User 类也必须是可序列化的。

【讨论】:

  • 我已经修改了“public class User implements Serializable{”仍然我得到了错误。奇怪!!
  • 如果在命名同一个类时出现完全相同的错误,则说明您没有部署它,或者您没有重新创建您要读取的tream。如果它命名了一个新类,则使该类可序列化,以此类推,直到关闭。
  • 非常感谢朋友!我已经重新创建了 .ser 文件并且代码有效。
【解决方案2】:

如果没有看到你的代码,很难确定,但原因几乎总是你的类有一个不可序列化的字段(或者包含一个包含字段的对象,......)。对象中的所有内容,包括对象引用的所有内容以及这些对象引用的所有内容,都必须可序列化以避免异常。

【讨论】:

    【解决方案3】:

    -Dsun.io.serialization.extendedDebugInfo=true 传递给JVM 以跟踪NotSerializableException 的确切原因。

    例如:在startup.bat中添加SET CATALINA_OPTS=%CATALINA_OPTS% -Dsun.io.serialization.extendedDebugInfo=true

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 2014-08-05
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 1970-01-01
      • 2012-01-03
      相关资源
      最近更新 更多