java RMI应用程序。 “_stub无法强制转换”错误

时间:2010-12-20 00:52:14

标签: java rmi

在我将文件组织成包之前,这个程序运行正常。我得到的错误信息如下:

ClassCastException:a3.seneca.RemoteMethod_Stub无法强制转换为a3.seneca.RemoteMethod (第35行)

我的包结构如下(大写意味着目录):

-A3

- 服务器

---- DataAccessServer

- SENECA

---- RemoteMethodInterface

---- RemoteMethod

- CLIENT

---- DataAccessClient

错误消息所指的行是:

RemoteMethod rmHandler = (RemoteMethod) Naming.lookup("rmi://localhost:666/location");

事先,在DataAccessServer中,我这样做:

RemoteMethod rm = new RemoteMethod();
Naming.rebind("rmi://localhost:666/location", rm);

要运行的步骤如下:

控制台窗口#1: rmir​​egistry 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

2 个答案:

答案 0 :(得分:0)

您正在尝试将存根转换为服务器类。您应该将其强制转换为远程接口。存根不是服务器的实例,它是远程接口的实例。这就是RMI的工作原理,它就是远程接口的用途。

答案 1 :(得分:0)

我有同样的错误。问题是,我也已经将接口(扩展到远程)复制到了客户端。应该将其添加到依赖项而不是复制。

最好的方法是导出该接口的jar。并将其添加到客户端依赖项中并使用它。

希望它会有所帮助:)