我在写了一个很简单的测试程序,发现没有办法运行。请大家指点。
代码如下:
import java.rmi.Remote;public interface SerInterface extends Remote{}
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class ServerImpl extends UnicastRemoteObject implements SerInterface {

private static final long serialVersionUID = 1L;
public ServerImpl()throws RemoteException{
System.out.println("server is strating ...");
}
public void f(){
System.out.println("a client call");
}
}
import java.rmi.Naming;
import java.rmi.registry.LocateRegistry;
public class Server {
public static void main(String[] args) {
System.out.println("a client is strating...");
System.out.println("hello");
try {
LocateRegistry.createRegistry(1099); 
ServerImpl si  = new ServerImpl();
System.out.println("binging server...");
Naming.rebind("server",si);
System.out.println("waiting for invocations from clients...");
} catch (Exception e) {
e.printStackTrace();
} }}
import java.rmi.Naming;
public class Client{

public static void main(String[] args){


try {
ServerImpl s = (ServerImpl)Naming.lookup("server");
s.f();
} catch (Exception e) {
e.printStackTrace();
}

}
}java.lang.ClassCastException: $Proxy0 cannot be cast to ServerImpl服务器可以跑起来,客户端是不行的。
请问是什么原因呀?

解决方案 »

  1.   

    你定义这远程接口下没写方法呀?接口里的每一个方法必须声明它将产生一个RemoteException异常应该把你的f()方法写里面抛异常
    import java.rmi.Remote;public interface SerInterface extends Remote{    public void f() throws RomoteException;} 我觉得现在应该可以了,不过我没法试
      

  2.   

    LZ你没结过帖??????????
    LZ你没结过帖??????????
    LZ你没结过帖??????????
      

  3.   

    RMI 现在几乎没人用了,不用刻意地去研究
      

  4.   

    你需要使用rmi编译器编译你的实现类 
    rmic cn.wzh.ServerImpl
    将会生成stub存根对象,也就是你的远程代理对象你在client端main方法应该使用接口调用
    SerInterface s = (SerInterface)Naming.lookup("server");启动Server时,注意启动RMI服务器
    开始 -> 运行 -> start rmiregistry