【问题标题】:ClassCastException Java RMI Notification FrameworkClassCastException Java RMI 通知框架
【发布时间】:2016-03-14 17:30:40
【问题描述】:

我试图在两个包中制作我的应用程序,以便稍后在两台不同的机器上模拟它,但是当我这样做时,我得到:

java.lang.ClassCastException: com.sun.proxy.$Proxy0 cannot be cast to client.RemoteServer
at client.NotificationSink.<init>(NotificationSink.java:34)
at client.NotificationSink.main(NotificationSink.java:20)

我想我也必须在客户端中移动类 RemoteImplementation 以避免此异常。但我确信我的整个结构是否正确。

我的问题: 如何解决这个异常? 我的整体结构是否正确(我正在构建通知框架)?

【问题讨论】:

  • RemoteServer 是接口吗?
  • 是的,它是一个接口,也是RemoteClient。
  • 如果RemoteServer 是一个接口,那么它必须在一个共享命名空间中......如果你有client.RemoteServer 和server.RemoteServer,你也可以将它们命名为client.Sue 和server .Sally ... yu 没想到能够将 Sue 投给 Sally,对吧?

标签: java server client rmi


【解决方案1】:

我认为这通常意味着您的系统中存在两个 intercaes RemoteServer,它们都已加载服务器,并且您正在尝试将使用该类的一个代理副本创建的实例传递给期望的代码另一个。
尝试删除其中一个 client.RemoteServer。

【讨论】:

  • 在 RemoteServer 我有方法 register(RemoteClient c),在 RemoteClient 我有通知(Notification n)。所以我应该在一个接口中传输这两种方法?(两个接口都扩展了 Remote)。
  • @Nikola 尝试在一个界面中传输所有方法
  • @Nikola 没有。没有理由组合这些接口。一个用于服务器,另一个用于客户端。但是你不能在不同的包中拥有相同接口的两个副本并期望它能够工作。通常有第三个包和第三个 JAR 文件用于服务器和客户端之间的通用内容。
猜你喜欢
  • 1970-01-01
  • 2018-08-15
  • 2021-08-14
  • 2011-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多