java.rmi.ServerException:服务器线程中发生RemoteException;ClassNotFoundException

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

当我通过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)
我只需在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运行时,我启动服务器时出现了一个闪烁。我是说一扇窗户立即打开和关闭。当我运行客户端程序时也发生了同样的情况。没有结果。我在问题中添加了我的服务器程序。。。