java.io.NotSerializableException:Etudiant

时间:2015-12-17 01:15:15

标签: java rmi

我创建了一个简单的RMI应用程序:

public interface IAbsence extends Remote {
    void inscrire(Etudiant e) throws RemoteException;
}

public class Absence extends UnicastRemoteObject implements IAbsence{
    protected Absence() throws RemoteException {
        super();
        listEtudiants = new ArrayList<Etudiant>();
    }

    private static final long serialVersionUID = 1L;
    private ArrayList<Etudiant> listEtudiants;

    public void inscrire(Etudiant e) throws RemoteException {
        listEtudiants.add(e);

    }
}

对于服务器,我有以下内容:

public class Serveur {
    public static void main(String[] args) throws RemoteException {

        Absence absence = new Absence();


             try {
                 Registry registry = LocateRegistry.createRegistry(52356);
                    registry.bind("Absence_RMI", absence);
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } 
            System.out.println("server ON");

    }

}

对于客户我有这个:

public class ClientEtudiant {

    public static void main(String[] args) {

        try {
            Registry registry = LocateRegistry.getRegistry("localhost",52356);
            IAbsence absence_rmi = (IAbsence)registry.lookup("Absence_RMI");

            ///.... some code
            absence_rmi.inscrire(new Etudiant(nom, prenom, cne));
            System.out.println("L'étudiant a été inscrit");
        } catch (RemoteException | NotBoundException  e1) {
            e1.printStackTrace();
        }


        }
}

当我运行服务器时,它运行没有问题,但是当我运行客户端时,我在行absence_rmi.inscrire...上收到一条错误,上面写着:

  

java.rmi.MarshalException:错误编组参数;嵌套   异常是:java.io.NotSerializableException:Etudiant

1 个答案:

答案 0 :(得分:0)

首先,如果您尝试发送自定义对象,则必须实施Interface Serializable

显然,从NotSerializableException Docs开始,如果您的类必须实现此接口,那么您将获得此异常,而您却没有。

其次,MarshallException在文档中有明确的解释可能的原因。确保您的RMI至少与原始类型一起使用。