在我将文件组织成包之前,这个程序运行得很好。我得到的错误信息如下:
ClassCastException:不能将a3.seneca.RemoteMethod_Stub转换为a3.seneca.RemoteMethod (第35行)
我的包结构如下(caps表示目录):
-A3
--服务器
-数据访问服务器
--SENECA
-RemoteMethodInterface
-RemoteMethod
--客户端
-DataAccessClient
错误消息所指的行如下:
RemoteMethod rmHandler = (RemoteMethod) Naming.lookup("rmi://localhost:666/location");在此之前,在DataAccessServer中,我这样做:
RemoteMethod rm = new RemoteMethod();
Naming.rebind("rmi://localhost:666/location", rm);要运行的步骤如下:
控制台窗口#1: rmiregistry 666
控制台窗口#2: java a3\seneca*.java
java a3\server*.java
java a3\client*.java
rmic -v1.2 a3.seneca.RemoteMethod
java DataAccessServer
控制台窗口#3:
java a3.client.DataAccessClient
将RemoteMethod_stub.class放入seneca目录中。在创建之后,我还尝试将其复制到客户端目录中。任何关于为什么会发生这种情况的见解都将不胜感激。
-Dan
发布于 2010-12-20 12:13:26
您正在尝试将存根转换为服务器类。您应该将其转换为远程接口。存根不是服务器的实例,它是远程接口的实例。这就是RMI的工作方式,也是远程接口的用途。
发布于 2018-09-21 20:36:57
我也犯了同样的错误。问题是,我也把接口(它扩展了远程)复制到了客户端。它应该添加到依赖项中,而不是复制。
最好的方法是导出该接口的jar。并将其添加到客户端依赖项中并使用它。
希望它能有所帮助:)
https://stackoverflow.com/questions/4486082
复制相似问题