Java RMI class com.sun.proxy.$Proxy0 无法转换为 class client.MessageServerInt
Java RMI class com.sun.proxy.$Proxy0 cannot be cast to class client.MessageServerInt
编辑:所以即使将它们全部更改为同一个包,仍然会出现错误。所以与包无关。
我正在为学校做一个 RMI client/server 项目。老师说 Server/Client 必须在不同的包中,我相信这就是我遇到这个问题的原因。只是要省略 space 的错误处理 (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 接口时,它 运行 变成了副本并发出了上述错误。
这里有什么教训?如果您进行了结构更改或遇到问题,请偶尔删除 class 文件。打了这么久肯定觉得自己很蠢。
编辑:所以即使将它们全部更改为同一个包,仍然会出现错误。所以与包无关。
我正在为学校做一个 RMI client/server 项目。老师说 Server/Client 必须在不同的包中,我相信这就是我遇到这个问题的原因。只是要省略 space 的错误处理 (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 接口时,它 运行 变成了副本并发出了上述错误。
这里有什么教训?如果您进行了结构更改或遇到问题,请偶尔删除 class 文件。打了这么久肯定觉得自己很蠢。