【问题标题】:Java RMI class com.sun.proxy.$Proxy0 cannot be cast to class client.MessageServerInt [duplicate]Java RMI 类 com.sun.proxy.$Proxy0 无法转换为类 client.MessageServerInt [重复]
【发布时间】: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学生

标签: java rmi


【解决方案1】:

希望有人可以通过从我的错误中吸取教训来节省一些时间。 问题是包问题,但最终是由于在客户端包下编译的剩余接口。

所以当我的客户端尝试访问 rmi 接口时,它遇到了重复并给出了上述错误。

这里要吸取的教训?如果您进行结构更改或遇到问题,请不时删除您的课程文件。打了这么久肯定觉得很愚蠢。

【讨论】:

  • ..但是如果我们有两个不同的服务器和客户端应用程序,因此我们分别编译接口呢?
  • @GiorgiTsiklauri 为共享接口和他们所依赖的任何东西使用共享项目。
猜你喜欢
  • 2018-09-08
  • 2020-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-18
  • 2013-05-30
  • 2015-07-14
相关资源
最近更新 更多