java - RMI 连接错误客户端

标签 java rmi rmiregistry

尝试连接到 RMI 服务时出现错误:

我正在执行客户端代码:

java -Djava.security.manager -Djava.security.policy=path\to\policy.all -jar "path\to\jarfile" "localhost:2020"

我使用的代码是:

public class PowerServiceClient
{
    public static void main(String args[]) throws Exception
    {

         System.setSecurityManager
            (new RMISecurityManager());

         // Call registry for PowerService
         PowerService service = (PowerService) Naming.lookup
            ("rmi://localhost:2020/PowerService");

         DataInputStream din = new
             DataInputStream (System.in);

    }
}

我收到的错误是:

    Exception in thread "main" java.rmi.UnmarshalException: 
    error unmarshalling return; nested exception is:

    java.lang.ClassNotFoundException: rmiservice.PowerService
    at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
    at java.rmi.Naming.lookup(Unknown Source)
    at powerclient.PowerServiceClient.main(PowerServiceClient.java:32)
    Caused by: java.lang.ClassNotFoundException: rmiservice.PowerService
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at sun.rmi.server.LoaderHandler.loadProxyInterfaces(Unknown Source)
    at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
    at sun.rmi.server.LoaderHandler.loadProxyClass(Unknown Source)
    at java.rmi.server.RMIClassLoader$2.loadProxyClass(Unknown Source)
    at java.rmi.server.RMIClassLoader.loadProxyClass(Unknown Source)
    at sun.rmi.server.MarshalInputStream.resolveProxyClass(Unknown Source)
    at java.io.ObjectInputStream.readProxyDesc(Unknown Source)
    at java.io.ObjectInputStream.readClassDesc(Unknown Source)
    at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
    at java.io.ObjectInputStream.readObject0(Unknown Source)
    at java.io.ObjectInputStream.readObject(Unknown Source)
    ... 3 more

有谁知道这里的问题是什么?

最佳答案

注册表需要访问您的远程接口(interface)类及其类路径上的依赖项。有三种解决方案。为了容易:

  1. 使用 LocateRegistry.createRegistry() 在服务器 JVM 中启动注册表
  2. 使用 -D-Jclasspath= 参数启动 rmiregistry 进程
  3. 使用代码库功能。

关于java - RMI 连接错误客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4214916/

相关文章:

java - 如何修改导丝样式表

java - Spring中使用@Resource和@Service注解时出错

java - 当 WindowsXP 客户端上存在防火墙时,RMI 调用不起作用,但在 Windows 7 客户端上正常

Java RMI 在没有绑定(bind)的情况下返回对远程对象的引用

java - jpa 来自 MappedSuperclass 的可嵌入继承

java - 如何将 StringBuilder 标记与多个 java 字符串进行比较?

Java RMI - 从接口(interface)/$Proxy 转换为原始类?

java - 在构建聊天应用程序时,Web Service 是否比 JMS、RMI 或 Socket 编程更好用?

java - 系统间连接异常

java - RMI理论,下载 stub 文件