【发布时间】:2019-02-24 05:12:53
【问题描述】:
编辑:因此,即使将它们全部更改为同一个包,仍然会出现错误。所以与包装无关。
我正在为学校做一个 RMI 客户端/服务器项目。老师说服务器/客户端必须在不同的包中,我相信这就是我遇到这个问题的原因。只是为了空间而忽略错误处理(try/catch)。服务器运行良好。我认为服务器和客户端位于两个不同的包中会导致问题,但不确定如何实际修复它,因为服务器和客户端位于两个不同的位置(机器)。
完整的错误信息是
java.lang.ClassCastException: class com.sun.proxy.$Proxy0 cannot be cast to class client.MessageServerInt (com.sun.proxy.$Proxy0 and client.MessageServerInt are in unnamed module of loader 'app')
界面
package server;
import java.rmi.*
public interface MessageServerInt extends Remote {
public boolean auth();
}
服务器
package server;
import java.rmi.*;
import java.rmi.server.*;
class Server extends UnicastRemoteObject implements MessageServerInt {
public Server() throws RemoteException {
}
public boolean auth() {
return true;
}
public static void main(String args[]) {
MessageServerInt srv= new Server();
Naming.rebind("rmi://localhost:1099/Server", srv);
}
}
客户
package client;
import java.rmi.*;
import server.MessageServerInt;
public class Client {
public static void main(String args[]) {
MessageServerInt stub = (MessageServerInt)Naming.lookup("//localhost:1099/server");
}
}
【问题讨论】:
-
您在不同的包中有两个远程接口副本。这意味着它们不一样。不要那样做。您需要一个远程接口,以某种方式在客户端和服务器之间共享。如果您的 IDE 和环境允许,您可以创建共享包,甚至可以在它们之间创建共享项目。
-
赞美你——ASU学生