0

我是在 Windows 7 上使用 RMI 的新手,我想用 RMI 运行我的项目以显示“HelloWorld”,但我无法运行它,因为我遇到了以下错误。任何人都可以帮助我。我也使用过JDK 1.6。

我的错误是:

java.rmi.UnmarshalException:解组参数错误;嵌套异常是:

    java.lang.ClassNotFoundException: Hello_Stub
4

3 回答 3

1

您可以通过三种方式获得此异常:

  1. 构造/导出远程对象时。在这种情况下,这意味着您没有为super(int port...)远程对象扩展UnicastRemoteObject,UnicastRemoteObject.exportObject()其他情况提供端口号参数,并且您还没有通过rmic. 请注意,如果您提供端口号参数,即使为零,您根本不需要运行rmic

  2. 将远程对象绑定/重新绑定到注册表时(在服务器中)。在这种情况下,这意味着您没有像上面那样提供端口号等,但是您已经生成了存根,否则您不会因为(1)而走到这一步,但是_Stub 类对注册表不可用它的类路径。最简单的解决方案是在同一个 JVM 中运行 Registry,通过LocateRegistry.createRegistry(). 请注意,此方法的返回值需要存储在不会被垃圾回收的地方,例如静态变量中。

  3. 查找注册表时(在客户端)。在这种情况下,这意味着您没有像上面那样提供端口号等,但是您已经生成了存根,否则由于 (1) 和 (2),您不会走到这一步,但是_Stub 类不可用到其 CLASSPATH 上的客户端。解决方案:将其部署到客户端。

于 2012-06-07T02:03:00.757 回答
0

听起来您可能正在关注本教程的过时版本:http: //docs.oracle.com/javase/1.5.0/docs/guide/rmi/hello/hello-world.html。如果不是这种情况,请在命令行 ( java -version) 上检查您的 Java 版本。

于 2012-06-06T18:03:22.833 回答
0

我猜你必须使用rmic.exe来生成你的远程类存根。这些不是由您的 Java 编译器 (javac.exe) 自动生成的。

您可以定义一个Ant 任务(称为 rmic)来简化您的工作并确保您的存根是自动生成的。

如果您使用的是 Eclipse,您甚至可以将此任务作为构建过程的一部分,这样您就可以确保每次编译代码时都会生成它们。很可能其他 IDE 也提供类似的功能。

于 2012-06-06T17:54:26.263 回答