我在类的一个方法中采用如下方法返回一个List的一部分
List<Mail> subList = new LinkedList(); if ((firstResult + maxResult) > mailList.size()) { subList = (List<Mail>) mailList.subList(firstResult, mailList
.size());
} else {
subList = (List<Mail>) mailList.subList(firstResult, firstResult
+ maxResult - 1);
}
return subList;
但是在返回时出现了如下错误:org.jboss.serial.exception.SerializationException: Could not create instance of java.util.SubList - java.util.SubList
at org.jboss.serial.classmetamodel.ClassMetaData.newInstance(ClassMetaData.java:342)
java.lang.InstantiationException: java.util.SubList

解决方案 »

  1.   

    序列化的问题,而且要序列化的竟然是一个不存在的类:java.util.SubList有更全一点的代码么?
      

  2.   

    List <Mail> subList = new LinkedList(); 
    对象没有泛型啊,应该:
    List <Mail> subList = new LinkedList<Mail>(); 
    有没有完整的代码?
      

  3.   

    该方法的代码是:
    public QueryResult getNoMailList(String username, String password,
    String mode, int firstResult, int maxResult) { Flag flag = null;
    if (mode.equals("delete")) {
    flag = Flag.DELETED;
    }
    System.out.println("noMailList mode:" + mode);
    System.out.println("flag is  " + (Flag.DELETED == flag));
    System.out.println("---------------into getNOMailList()");
    // mode标志邮件的链表
    List<Mail> mailList = new LinkedList<Mail>();
    // 创建Properties 对象
    Properties props = System.getProperties();
    session = Session.getDefaultInstance(props);
    // 获取邮箱的pop3存储 Store store = null;
    Folder folder = null;
    try {
    store = session.getStore(protocol);
    System.out.println("----------before connect------------");
    store.connect(host, username, password);
    // 获取inbox文件
    folder = store.getFolder("INBOX");
    folder.open(Folder.READ_ONLY); // 打开,打开后才能读取邮件信息 // 获取邮件消息
    Message message[] = folder.getMessages();
    System.out.println("message after---------");
    // 处理邮件
    // 等到指定标志的邮件或者等到全部邮件
    for (int i = 0; i < message.length; i++) {
    if (!(message[i].isSet(flag))) {
    // 产生存储邮件信息的Mail类
    Mail mail = new Mail();
    System.out.println("new mail after---------");
    // 将邮件信息存储到Mail类中
    try {
    mail.setMessage_id(message[i].getMessageNumber());
    mail.setContent((message[i].getContent()).toString());
    mail.setSubject(message[i].getSubject());
    mail.setFromaddress(message[i].getFrom()[0].toString());
    mail.setDate(message[i].getReceivedDate());
    mail.setFielname(message[i].getFileName());
    mail.setToaddress(message[i].getAllRecipients()[0]
    .toString());
    mail.setName(username); mail.setIsnew(message[i].isSet(Flag.SEEN));
    mail.setDelsign(message[i].isSet(Flag.DELETED));
    mail.setReply(message[i].isSet(Flag.ANSWERED));
    } catch (IOException e) {
    // TODO Auto-generated catch block
    System.out.println("exception ocrru");
    e.printStackTrace();
    }
    mailList.add(mail);
    }
    } } catch (NoSuchProviderException e) { e.printStackTrace();
    } catch (MessagingException e) { e.printStackTrace();
    } finally { try {
    if (folder != null) {
    folder.close(false);
    }
    if (store != null) {
    store.close();
    }
    } catch (MessagingException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    } folder = null;
    store = null;
    } // 将结果封装到QueryResult
    System.out.println("new queryResult");
    QueryResult qr = new QueryResult(); if ((firstResult + maxResult) > mailList.size()) { qr.setResultset(mailList.subList(firstResult, mailList.size()));
    } else {
    qr.setResultset(mailList.subList(firstResult, firstResult
    + maxResult - 1));
    } qr.setRecordtotal((long) mailList.size());
    System.out.println("over noMailList"); return qr;
    }
    QueryResult是自己写的一个序列化的类
      

  4.   

    have a try
    have a try
    List<Mail> subList = new LinkedList<Mail>(maillist.subList(xx, yy));
    qr.setResultset();qr的内置List是什么类型?
    Mail是否序列化了,Mail的属性是否也都序列化了(如果属性是某个自定义的类的话)