本人刚学java rmi,做了一个小程序,我写了一个两数相加的server,又写了一个客户端调用server中的add方法,可是总是报错:
java.lang.ClassCastException: server.AddImpl_Stub cannot be cast to service.interfaces.I_Add
我写的接口名字为I_Add,方法名为AddImpl。
请各位大虾帮忙解答一下怎么解决吧!小弟先谢过了!

解决方案 »

  1.   

    看错误提示是AddImpl类不是I_Add的实例,转换出错
    你是不是有个类class AddImpl implements I_Add //确信你的类实现了I_Add接口?
    还有,按你说的,类名是不是和你的接口的方法名重了
      

  2.   

    server端的AddImpl 类:
    package server;import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;public class AddImpl extends UnicastRemoteObject implements I_Add { private static final long serialVersionUID = 5524906781944708371L; public AddImpl() throws RemoteException {
    super();
    } @Override
    public int add(int x, int y) throws RemoteException {
    return x + y;
    }
    }
    AddServer 类:
    package server;import java.rmi.Naming;
    import java.rmi.RMISecurityManager;public class AddServer { /**
     * @param args
     */
    public static void main(String[] args) {
    try {
    System.setSecurityManager(new RMISecurityManager());
    AddImpl add = new AddImpl();
    Naming.bind("ADD", add);

    System.out.println("ADD Server Run!!!");
    } catch (Exception e) {
    e.printStackTrace();
    }
    }}
    I_Add接口:
    package server;import java.rmi.Remote;
    import java.rmi.RemoteException;public interface I_Add extends Remote {
    int add(int x, int y) throws RemoteException;
    }客户端:
    jButton.addActionListener(new java.awt.event.ActionListener() {
    public void actionPerformed(java.awt.event.ActionEvent e) {
    try {
    I_Add add = (I_Add) Naming.lookup("rmi://localhost/ADD");
    int x = new Integer(jTextField0.getText().trim()).intValue();
    int y = new Integer(jAddTxtField1.getText().trim()).intValue();
    jTextField.setText(add.add(x, y) + "");
    } catch (Exception e1) {
    e1.printStackTrace();
    }
    }
    });
    自己找了感觉没错啊!请帮忙解答一下吧!