我是在Windows 7上使用RMI的新手,并且我想使用RMI运行我的项目以显示“ HelloWorld”,但是我无法运行它,因为出现了以下错误。任何人都可以帮助我。
我也用过JDK 1.6。
我的错误是:
java.rmi.UnmarshalException:错误解组参数;嵌套的异常是:
java.lang.ClassNotFoundException: Hello_Stub
最佳答案
有三种方法可以获取此异常:
构造/导出远程对象时。在这种情况下,这意味着如果您的远程对象扩展了super(int port...)
,则没有为UnicastRemoteObject,
提供端口号参数,否则,您没有为UnicastRemoteObject.exportObject()
提供端口号参数,也没有通过rmic
生成存根。请注意,如果您提供端口号参数,甚至为零,则根本不需要运行rmic
。
将远程对象绑定/重新绑定到注册表时(在服务器中)。在这种情况下,这意味着您没有提供上面的端口号等,但是您已经生成了存根,否则由于(1)的原因您不会得到这么多,但是_Stub类在注册表上不可用其CLASSPATH。最简单的解决方案是通过LocateRegistry.createRegistry()
在同一JVM中运行注册表。请注意,此方法的返回值需要存储在不会被垃圾回收的地方,例如在静态变量中。
查找注册表时(在客户端中)。在这种情况下,这意味着您没有提供上面的端口号等,但是您已经生成了存根,否则由于(1)和(2)的缘故,您不会走得太远,但是_Stub类不可用在其CLASSPATH上传递给客户端。解决方案:将其部署到客户端。