java.rmi.ServerException: RemoteException произошло в потоке сервера; Класснотфаундексцептион

Когда я запускаю свой серверный код через eclipse, я получаю следующее исключение:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: com.RMIInterface
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:413)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)

Я запустил реестр RMI, просто набрав «start rmiregistry» в строке cmd. Открылось новое окно с заголовком «c:\Program Files\Java\jdk1.7.0\bin\rmiregistry.exe». В этом пути только у меня есть JDK.

Все мои файлы .class доступны по этому пути: D:\Workspace\Study\bin\com.

В папке com у меня есть все три файла «RMIInterface, RMIServer, RMIClient».

Когда я запускаю код сервера из eclipse, я получаю вышеупомянутое исключение (т. Е.) RMIInterface не найден. Но он у меня в той же папке.

Что еще я должен сделать, чтобы запустить сервер?

Это мой код сервера:

RMIServer serRef = new RMIServer();
try {
    RMIInterface inref = (RMIInterface)UnicastRemoteObject.exportObject(serRef, 0);
    Registry reg = LocateRegistry.getRegistry();
    reg.bind("ServerObj", inref); -------->Exception in this line
} catch (AlreadyBoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }

person Karthik    schedule 26.09.2012    source источник
comment
у вас есть файлы .class всех трех в одной папке?   -  person gprathour    schedule 26.09.2012
comment
Вы получаете это при экспорте? привязка? искать в клиенте? или вызов удаленного метода в клиенте?   -  person user207421    schedule 26.09.2012
comment
Все мои файлы .class находятся в одной папке. Я получаю эту ошибку, когда пытаюсь запустить код сервера. Я имею в виду, что хочу запустить сервер. Это правильный способ запуска сервера RMI через eclipse?   -  person Karthik    schedule 26.09.2012
comment
Наконец-то я решил. Registry reg = LocateRegistry.getRegistry(); создал проблему. Вместо этого мне помог LocateRegistry.createRegistry()   -  person Karthik    schedule 26.09.2012


Ответы (2)


Я думаю, проблема в том, как вы получаете доступ к своему интерфейсу.

Как вы сказали, Under the com folder I have all three files "RMIInterface, RMIServer,RMIClient".

Если у вас есть все файлы в одном пакете/папке, то почему вы пишете com.RMIInterface

это должно быть просто RMIInterface, потому что то, как вы упомянули, будет искать другой пакет с именем com в вашем текущем пакете com.

Надеюсь, вы поняли мою точку зрения.

Изменить

При запуске RMI-программ нам необходимо, чтобы rmiregistry работал.

Вы должны запустить rmiregistry перед запуском программы сервера.

Попробуйте запустить его из консоли или CMD в Windows.

Попробуйте rmiregistry или start rmiregistry в CMD. При запуске из CMD нам нужно запустить rmiregistry из той же папки/пакета, из которой мы запускаем javac и java. В случае eclipse, я думаю, вам следует попробовать запустить rmiregistry из вашей папки com.

Обновить

Я думаю, что до сих пор вы пытаетесь запустить rmiregistry из папки com. Просто попробуйте запустить его из папки com.

Несмотря на D:\Workspace\Study\bin\com>start rmiregistry

пытаться

D:\Workspace\Study\bin\start rmiregistry

person gprathour    schedule 26.09.2012
comment
com.RMIInterface — это полное имя класса. Здесь нет никаких доказательств того, что он вообще это «пишет», и если бы он это сделал, это не было бы ошибкой. Понизить. - person user207421; 26.09.2012
comment
Но я не использовал com.RMIInterface. Просто я использовал только RMIInterface. - person Karthik; 26.09.2012
comment
@GPS Я запустил rmiregistry перед запуском сервера. В приглашении cmd я прохожу путь к моей папке com и запускаю rmiregistry. окно реестра открылось. После этого только я запустил свою серверную программу... - person Karthik; 26.09.2012
comment
Можете ли вы попробовать запустить программу в CMD? Например, запустить rmiregistry в cmd, а затем запустить сервер и клиентские программы из cmd? - person gprathour; 26.09.2012
comment
@GPS Когда я пытаюсь запустить из CMD, я запускаю сервер, происходит мигание. Я имею в виду окно, открытое и закрытое немедленно. То же самое произошло, когда я запускаю клиентскую программу. Вывод не получился. Я добавил свою серверную программу в вопрос... - person Karthik; 26.09.2012
comment
@Karthik В этом я думаю, что ваш rmiregistry не запускается должным образом. Потому что, если вы запускаете команду start rmiregistry, она должна запускать новую консоль cmd и должна оставаться там, если вы ее не закроете. - person gprathour; 26.09.2012
comment
@GPS Извините, что спрашиваю больше. Но, как вы сказали, запустилась новая консоль cmd. Я считаю, что это rmregistry. Это неправильно? Не подскажете, как правильно начать? - person Karthik; 26.09.2012

Remote Server Error:RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: mathInterface

Ошибку очень просто решить, выполнив следующие шаги:

  • Например, ваш java-файл считает диск D
  • Запустите rmiregistry с диска D (например, D:\start rmiregistry), затем не запускайте rmiregistry на других дисках, это приведет к указанной выше ошибке.

(Где бы ни был ваш файл, запустите rmiregistry)

ссылка: java.rmi.ServerException: RemoteException произошло в потоке сервера (ClassNotFoundException)

person Chris Sim    schedule 03.09.2013