繁体   English   中英

在Windows 7上使用RMI

[英]Using RMI on the windows 7

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

我的错误是:

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

    java.lang.ClassNotFoundException: Hello_Stub

有三种方法可以获取此异常:

  1. 构造/导出远程对象时。 在这种情况下,它意味着你没有提供的端口号参数super(int port...)如果你的远程对象扩展UnicastRemoteObject,UnicastRemoteObject.exportObject()否则你有没有产生经由支rmic 请注意,如果您提供的端口号参数,甚至为零,则根本不需要运行rmic

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

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

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

您可以定义一个Ant Task (称为rmic)来简化您的生活,并确保自动生成存根。

如果您使用的是Eclipse,则甚至可以将此任务包含在构建过​​程中,以确保每次编译代码时都会生成该任务。 可能其他IDE也提供类似的功能。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM