2

当我通过 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 rmiregistry”即可启动 RMI 注册表。一个新窗口打开,标题为“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();
    }
4

2 回答 2

1
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)

于 2013-09-03T13:37:56.670 回答
1

我认为问题在于您访问界面的方式。

如你所说,Under the com folder I have all three files "RMIInterface, RMIServer,RMIClient".

如果您确实将所有文件都放在同一个包/文件夹中,那么您为什么要写com.RMIInterface

应该只是RMIInterface因为您提到的方式会搜索com当前包中调用的另一个com包。

我希望你明白我的意思。

编辑

在运行 RMI 程序时,我们确实需要运行 rmiregistry。

您应该在启动服务器程序rmiregistry 之前运行。

尝试从 Windows 中的控制台或 CMD 运行它。

尝试rmiregistrystart rmiregistry在 CMD 中。从 CMD 运行时,我们确实需要从我们运行的相同文件夹/包启动 rmiregistry,javac并且java. 如果是 Eclipse,我猜你应该尝试从你的 com 文件夹运行 rmiregistry。

更新

我认为直到现在您都在尝试从 com 文件夹中启动 rmiregistry。只需尝试从您的 com 文件夹中启动它。

尽管 D:\Workspace\Study\bin\com>start rmiregistry

尝试

D:\Workspace\Study\bin\start rmiregistry

于 2012-09-26T09:02:07.917 回答