gpt4 book ai didi

java - 获取对 RMI 服务器的引用时,客户端上的 RMI 生成异常

转载 作者:行者123 更新时间:2023-11-30 05:12:18 26 4
gpt4 key购买 nike

当我在运行 RMI 服务器后尝试运行 RMI 客户端时,出现以下异常:

EncodeInterface exception: java.lang.ClassCastException: $Proxy30 cannot be cast to hw2.chat.backend.main.EncodeInterface
java.lang.ClassCastException: $Proxy30 cannot be cast to hw2.chat.backend.main.EncodeInterface
at hw2.chat.backend.main.EncodingRmiClient.initialiseRMIClient(EncodingRmiClient.java:26)

RMI客户端中的相关代码为:

EncodeInterface encodeInterface;
Registry registry = LocateRegistry.getRegistry(host, portNumber);
encodeInterface = (EncodeInterface)registry.lookup("RmiEncodingServer"); //line 26

在 RMI 服务器中:

    try
{
EncodeInterface encodeInterface = new EncoderImpl();
Registry registry = LocateRegistry.getRegistry();
registry.rebind("RmiEncodingServer", encodeInterface);
System.out.println("RmiEncodingServer is running...");
}

EncodeInterface 是扩展 Remote 的接口(interface),并且也存在于客户端。

主机是“127.0.0.1”,端口号是1099(我假设它应该是默认值1099,因为我在运行RmiEncodingServer时没有指定它)。

如果我不运行 RMI 服务器,我会得到同样的异常,您知道为什么会发生这种情况吗?

谢谢

最佳答案

ClassCastException 通常意味着:

  • EncoderImpl 未实现 EncodeInterface,或者
  • 客户端和服务器端的.jar不同,导致部署的类有两个版本,视为不同。

一些提示:

  1. 检查您是否实现了接口(interface),例如

    EncoderImpl 扩展 UnicastRemoteObject 实现 EncodeInterface

  2. 按照 java serialization 支持的方式将版本 ID 添加到您的类中,例如

    静态最终长serialVersionUID = 10275539472837495L;

  3. 清理、重建、重新部署并重新启动所有内容,以确保相同的 jar 已部署到各处,并且没有服务器在某处运行

希望它有帮助,否则请在问题中提供更多信息。

相关问题:Java RMI proxy issue

关于java - 获取对 RMI 服务器的引用时,客户端上的 RMI 生成异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2990777/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com