Java 在Windows7上使用RMI

Java 在Windows7上使用RMI,java,Java,我是在Windows7上使用RMI的新手,我想用RMI运行我的项目以显示“HelloWorld”,但我无法运行它,因为我遇到了以下错误。任何人都可以帮我。 我还使用了JDK1.6 我的错误是: java.rmi.UnmarshalException:错误解组参数;嵌套异常是: java.lang.ClassNotFoundException: Hello_Stub 我想您必须使用生成远程类存根。这些不是由Java编译器(javac.exe)自动生成的 您可以定义一个(称为rmic)来简

我是在Windows7上使用RMI的新手,我想用RMI运行我的项目以显示“HelloWorld”,但我无法运行它,因为我遇到了以下错误。任何人都可以帮我。 我还使用了JDK1.6

我的错误是:

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

    java.lang.ClassNotFoundException: Hello_Stub

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

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


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

听起来您可能在遵循本教程的过时版本:。如果不是这样,请在命令行上检查Java版本(
Java-version
)。

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

  • 构造/导出远程对象时。在这种情况下,如果远程对象扩展了
    UnicastRemoteObject,
    UnicastRemoteObject.exportObject()
    ,则表示您没有向
    super(int port…
    提供端口号参数,否则,您没有通过
    rmic
    生成存根。请注意,如果提供端口号参数,即使是零,也不需要运行
    rmic

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

  • 查找注册表时(在客户端中)。在本例中,这意味着您没有像上面那样提供端口号等,但是您已经生成了存根,否则由于(1)和(2),您不会走到这一步,但是_stub类在其类路径上对客户端不可用。解决方案:将其部署到客户端


  • rmic.exe
    自Java 1.5/5.0以来就不需要了。我已经完成了,但在运行服务器文件后,我得到了它。。我不知道我的问题是什么..我已经做了,但在运行服务器文件后,我得到了。。我不知道我的问题是什么。@ChrisDennett如果在构造(超级(端口))或导出时不提供端口号参数,则仍然需要它。有关原因,请参阅UnicastRemoteObject的前言。端口与是否需要rmic无关。确实不需要。不需要rmic,它在旧版本的Java中被弃用。它不再使用了。这是在现在的动态编程工具出现之前。还要确保您使用的是1.6。在命令行上键入
    java-version
    以确认。