java.rmi.ServerException:服务器线程中发生RemoteException(ClassNotFoundException)

2024-02-28

方法如下:

    private void startServer() { // snippet that starts the server on the local machine
        try {
             RemoteMethodImpl impl = new RemoteMethodImpl();
             Naming.rebind( "Illusive-Server" , impl );
        } catch(Exception exc) {
            JOptionPane.showMessageDialog(this, "Problem starting the server", "Error", JOptionPane.ERROR_MESSAGE);
            System.out.println(exc);
        }
    }

抛出这个异常:

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
        java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
        java.lang.ClassNotFoundException: Interfaces.RemoteMethodIntf

当我开始我的项目时,我在 JOptionPane 中收到一条消息:启动服务器时出现问题,然后出现上述异常。这可能是什么原因?

我不明白为什么最后一个例外声明说当我导入正确的包时找不到类.


此异常有四种情况。

  1. 导出时:您没有运行“rmic”,并且没有执行 Javadoc 序言中描述的步骤UnicastRemoteObject使其变得不必要。

  2. 绑定时:注册表没有存根或远程接口或它们依赖于其类路径的东西。

  3. 查找时:客户端的类路径上没有这些东西。

  4. 调用远程方法时:您要么向 CLASSPATH 上不存在的类的服务器发送某些内容,要么从不在您的 CLASSPATH 上的类的服务器接收某些内容(包括异常):在这两种情况下都可能是派生类或接口远程接口的方法签名中提到的类或接口的实现。

这是情况 2。注册表找不到指定的类。

有几种解决方案:

  1. 使用包含相关 JAR 或目录的 CLASSPATH 启动注册表。

  2. 通过以下方式在服务器 JVM 中启动注册表LocateRegistry.createRegistry().

  3. 使用动态存根,如 Javadoc 的序言中所述UnicastRemoteObject.然而,您可能仍然会遇到与远程接口本身或其依赖的类相同的问题,在这种情况下,上述 1-3 仍然适用于该类/那些类。

  4. 确保不会出现上述情况(4)。

  5. 使用代码库功能。这确实是一个部署选项,在我看来,这是在初始开发阶段应该避免的事情。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java.rmi.ServerException:服务器线程中发生RemoteException(ClassNotFoundException) 的相关文章

随机推荐