java.rmi.ServerException:服务器线程中发生RemoteException;ClassNotFoundException
当我通过eclipse运行服务器代码时,出现以下异常:java.rmi.ServerException:服务器线程中发生RemoteException;ClassNotFoundException,java,rmi,Java,Rmi,当我通过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.RMI
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)
我只需在cmd行中键入“start RMI Registry”即可启动RMI注册表。新窗口打开,标题为“c:\Program Files\Java\jdk1.7.0\bin\rmiregistry.exe”。在这个路径中,只有JDK
此路径中可用的所有my.class文件:D:\Workspace\Study\bin\com
在com文件夹下,我有三个文件“rminterface,RMIServer,RMIClient”
当我从eclipse运行服务器代码时,我得到了上面提到的异常(即)未找到RMI接口。但我把它放在同一个文件夹里
我还应该做些什么来运行服务器
这是我的服务器代码:
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();
}
我认为问题在于你访问界面的方式 正如您所说,
在com文件夹下,我有三个文件“rminterface、RMIServer、RMIClient”。
如果所有文件都在同一个包/文件夹中,那么为什么要编写com.rminterface
它应该是rminterface
,因为您提到的方法会在您当前的com
包中搜索另一个名为com
的包
我希望你明白我的意思
编辑
在运行RMI程序时,我们确实需要运行RMI注册表
您应该在启动服务器程序之前运行rmiregistry
尝试从控制台或windows中的CMD运行它
在CMD中尝试rmiregistry
或start rmiregistry
。在从CMD运行时,我们确实需要从运行javac
和java
的同一文件夹/包启动rmiregistry。在eclipse的情况下,我想您应该尝试从com文件夹运行rmiregistry
更新
我想你现在正试图从com文件夹中启动rmiregistry。只需尝试从com文件夹中启动它
尽管
D:\Workspace\Study\bin\com>启动注册表
Remote Server Error:RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: mathInterface
试一试
D:\Workspace\Study\bin\start注册表
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驱动器< /LI>
- 启动RMID注册表驱动器(示例D:\Start rmiregistry),然后不要在其他驱动器上启动RMI注册表,这将产生上述错误
rmiregistry
)
参考资料:您是否在同一文件夹中有这三个文件的.class文件?您在导出时收到了吗?结合在客户端中查找?或者调用客户端中的远程方法?所有my.class文件都在同一文件夹中。我在尝试运行服务器代码时遇到此错误。我的意思是我想启动服务器。这是通过eclipse启动RMI服务器的正确方法吗?我终于解决了。Registry reg=LocateRegistry.getRegistry();制造了问题。相反,LocateRegistry.createRegistry()帮助我
com.rminterface
是类的完全限定名。这里没有证据表明他在“写”这些,如果他写了也不会错。向下投票。但我没有使用com.rmi接口。我只是简单地使用了RMI接口。@在启动服务器之前,我已经启动了RMI注册表。在cmd提示符中,我导航到我的com文件夹的路径,并给出“启动注册表”。注册表窗口被打开了。之后,只有我启动了我的服务器程序…你能试着用CMD运行程序吗?就像在cmd中启动rmiregistry,然后从cmd?@GPS运行服务器和客户端程序一样,当我尝试从cmd运行时,我启动服务器时出现了一个闪烁。我是说一扇窗户立即打开和关闭。当我运行客户端程序时也发生了同样的情况。没有结果。我在问题中添加了我的服务器程序。。。