这个问题在这里已有答案:
编辑:所以即使将它们全部更改为同一个包,仍然会收到错误。所以没有包相关。
我正在为学校做一个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");
}
}
希望有人可以通过从错误中吸取教训来节省一些时间。问题是一个包问题,但最终是由于在客户端包下编译的剩余接口。
因此,当我的客户端尝试访问rmi接口时,它会遇到重复并发出上述错误。
这里要吸取的教训是什么?如果进行结构更改或遇到问题,请暂时删除一次类文件。绝对感到愚蠢的斗争这么久。