运行rmi服务器,classnotfound

嗨,我正在尝试运行将类绑定到命名服务器的Java应用程序,但是我不断收到ClassNotFoundException


首先,我启动注册表:


登记处


然后从Eclipse我尝试执行服务器,但出现此错误


java.rmi.ServerException:服务器线程中发生RemoteException;嵌套的异常是:java.rmi.UnmarshalException:错误解组参数;嵌套的异常是:java.lang.ClassNotFoundException:在sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)处的progInternet2008.commons.NominabileFactory在sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)处sun.rmi.transport.Transport.Transport $ 1.run(Transport.java:159)在sun.rmi处的java.security.AccessController.doPrivileged(本机方法)在sun.rmi.transport.Transport.serviceCall(Transport.java:155) sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler.run0(TCPTransport.java:790)上的.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)在sun.rmi.transport.tcp.TCPTransport $ ConnectionHandler上。在java.util.concurrent.ThreadPoolExecutor $ Worker.runTask(ThreadPoolExecutor.java:886)处运行(TCPTransport.java:649)在java.lang的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:908)处运行sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255)处的.Thread.run(Thread.java:619)在sun.rmi处的sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233)处的。在sun.rmi.registry.RegistryImpl_Stub.rebind上的server.UnicastRef.invoke(UnicastRef.java:359)(在progInternet2008.Pozzobon.tesi.Slave.main(Slave.java:54)上的未知源)(原因):java.rmi。 UnmarshalException:错误解组参数;嵌套的异常是:java.lang.ClassNotFoundException:sun.rmi.registry.RegistryImpl_Skel上的progInternet2008.commons.NominabileFactory。


我已经阅读了RMI Java教程,但仍然无法正常工作...


作为虚拟机参数,我已经设置了:


-Djava.rmi.server.codebase = file:$ {workspace_loc} / progInternet2008


请帮我


(我正在使用Java 6)


PIPIONE
浏览 475回答 3
3回答

Qyouu

rmiregisrty从/ bin,/ build或/ build / classes文件夹中运行命令,无论哪个文件夹是所构建文件的根目录。我花了半天的时间来解决同样的问题。

婷婷同学_

发生异常是因为rmiregistry应用程序不知道从何处加载类。当您尝试在RMI注册表中绑定对象时,注册表将下载该对象的类定义。其他一些答案则告诉您通过设置rmiregistry应用程序的类路径来解决此问题,以便它在启动时具有类定义,并且不需要下载任何内容,但是Sun的Java RMI教程明确表示不要这样做。这个。我怀疑这可能会导致注册表中的类版本与服务器上的类之间发生冲突。解决此问题的正确方法是,按照您的尝试设置java.rmi.server.codebase属性。该属性要求目录路径以正斜杠终止,如下所示:-Djava.rmi.server.codebase = file:$ {workspace_loc} / progInternet2008 /如果$ {workspace_loc}变量是相对路径,并且rmiregistry应用程序未在同一目录中启动,因此相对路径不正确,则可能也会遇到麻烦。如果将路径设为绝对路径,或在适当的目录中启动rmiregistry,则ClassNotFoundException应该消失。有关更多详细信息,请参见java.rmi.server.codebase属性上的教程。

月关宝盒

好吧,我克服了这个问题。确保当你运行rmiregistry你的CLASSPATH环境变量设置。例如,您可能有一个脚本:set CLASSPATH=[path to jdbc driver].jarrmiregistry.exe这就是使丢失的类路径正常工作所需要的。我不确定如何发送-cp commandline给rmiregistry.exe。它的文档非常缺乏。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java