Приложение Java RMI.Ошибка _stub не может быть приведена - PullRequest
0 голосов
/ 20 декабря 2010

Эта программа работала хорошо, прежде чем я организовал файлы в пакеты.Я получаю следующее сообщение об ошибке:

ClassCastException: a3.seneca.RemoteMethod_Stub не может быть приведен к a3.seneca.RemoteMethod (строка 35)

Моя структура пакета следующая (caps означаеткаталог):

-A3

- SERVER

---- DataAccessServer

- 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 помещенв Сенека ужасныйctory.Я также попытался скопировать его в каталог клиента после его создания.Любое понимание того, почему это происходит, будет с благодарностью.

-Дан

Ответы [ 2 ]

0 голосов
/ 21 сентября 2018

У меня была такая же ошибка.Проблема была в том, что я скопировал интерфейс (который расширяет возможности удаленного доступа) и на клиента.Который должен был быть добавлен к зависимостям, а не к копированию.

Лучший способ сделать это - экспортировать банку этого интерфейса.И добавьте его в зависимости от клиента и используйте его.

Надеюсь, это поможет:)

0 голосов
/ 20 декабря 2010

Вы пытаетесь привести заглушку к классу сервера. Вы должны привести его к удаленному интерфейсу. Заглушка не является экземпляром сервера, это экземпляр удаленного интерфейса. Вот как работает RMI и для чего предназначен удаленный интерфейс.

...