Java RMI客户端和服务器是独立的机器

Java RMI客户端和服务器是独立的机器,java,rmi,Java,Rmi,我想编辑RMI hello world示例,以便在不同的机器上使用客户机和服务器,但我遇到了解组返回错误 如果我在同一个项目中在Netbeans上运行客户端和服务器,它们可以正常工作,但是当我拆分它们时,我在客户端将try语句编辑为: try { Registry registry = LocateRegistry.getRegistry("localhost"); String[] c = registry.list(); System.out.println(c[0]

我想编辑RMI hello world示例,以便在不同的机器上使用客户机和服务器,但我遇到了解组返回错误

如果我在同一个项目中在Netbeans上运行客户端和服务器,它们可以正常工作,但是当我拆分它们时,我在客户端将try语句编辑为:

try {
    Registry registry = LocateRegistry.getRegistry("localhost");
    String[] c = registry.list();
    System.out.println(c[0].toString());
    Remote lookup = Naming.lookup("HelloServer");                                             
} catch (Exception e) {
    System.out.println("HelloClient exception: " + e.getMessage());
}
没有
remotelookup=Naming.lookup(“HelloServer”),print命令给出了“HelloServer”,这是正确的,但是当我创建远程对象时,我得到了以下错误:

HelloClient exception: error unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: rmimain.Hello

我已经测试了该策略,它工作正常,非常感谢您的帮助。

您的客户端在其类路径上没有rmimain.Hello类。

可能重复的lookup()不会“创建远程对象”。它在RMI注册表中查找它。这不是同一件事。我知道……我想从注册表中查找对象,从中创建远程对象……问题是,即使查找对象也会给我一个错误……在解决这个问题之前,我无法继续,我重复。Registry.lookup()不创建远程对象。你也是。远程对象位于服务器上。你从查找中得到的是一个存根,你没有用它“创建”任何东西:你只是使用它。好吧……但我甚至没有存根……Naming.lookup()给出了错误,我该如何解决?我尝试将Hello接口添加到客户端,但它给出了相同的错误,如何在客户端上创建服务器类的类路径?您尝试了如何?在你的问题中展示你做了什么。你的最后一句话没有意义。我已经将接口Hello添加到客户端项目,并且我已经将rmimain.Hello类添加到CLASSPATH环境变量中…当我回显%CLASSPATH%时,它给出了:C:\Users\Nina\u 2\Documents\NetBeansProjects\rmimain\build\classes\rmimain我做得对吗?因为没有任何更改,它仍然会给出相同的解组返回错误。您不能将类添加到类路径。您只能添加目录或JAR文件。对不起,我是说我添加了包含rmimain.Hello类的目录