【问题标题】:Java RMI Client and Server Separate MachinesJava RMI 客户端和服务器分离的机器
【发布时间】:2013-05-19 23:03:23
【问题描述】:

我想编辑 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());
}

如果没有Remote lookup = Naming.lookup("HelloServer");,打印命令会给出正确的“HelloServer”,但是当我创建远程对象时出现此错误:

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

我已经测试了该政策,它运行良好,非常感谢任何帮助。

【问题讨论】:

  • lookup() 不会“创建远程对象”。它在 RMI 注册表中查找它。这不是一回事。
  • 我知道....我想从注册表中查找对象以从中创建一个远程对象....好吧,即使查找对象也给了我一个错误....在解决之前我无法继续
  • 我重复一遍。 Registry.lookup() 不会创建远程对象。你也不行。远程对象在服务器上。你从查找中得到的是一个存根,你不会用它“创建”任何东西:你只是使用它。
  • 好的...但我什至无法拥有存根... Naming.lookup() 给出了错误

标签: java rmi


【解决方案1】:

您的客户端的 CLASSPATH 中没有 rmimain.Hello 类。

【讨论】:

  • 我该如何解决呢?我尝试将 Hello 接口添加到客户端,但它给出了相同的错误,我如何在客户端上创建服务器类的类路径?
  • 你试过怎么做?在你的问题中展示你做了什么。你的最后一句话没有意义。
  • 我已将 Hello 接口添加到客户端项目中,并将 rmimain.Hello 类添加到 CLASSPATH 环境变量中...当我回显 %CLASSPATH% 时,它会给出:C:\ Users\Nina_2\Documents\NetBeansProjects\RMIMain\build\classes\rmimain 我做对了吗?因为没有任何改变它仍然给出相同的解组返回错误。
  • 您不能将类添加到 CLASSPATH。您只能添加目录或 JAR 文件。
  • 对不起,我的意思是我添加了具有 rmimain.Hello 类的目录
猜你喜欢
  • 1970-01-01
  • 2012-10-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
相关资源
最近更新 更多