首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RMI ClassNotFoundException

RMI ClassNotFoundException
EN

Stack Overflow用户
提问于 2011-05-21 23:25:14
回答 1查看 2.1K关注 0票数 1

在过去的一周里,我一直在构建一个RMI应用程序,我遇到了一个障碍,任何谷歌搜索似乎都帮不上忙。

以下代码用于通过RMI将对象从服务器发送到客户端:

服务器代码:

代码语言:javascript
复制
import rocks.Rock;
import rocks.squareRock;

import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class Server extends UnicastRemoteObject
        implements RemInterface {

    public Server() throws RemoteException {
        super();
    }

    public static void main(String argv[]) {
        try {
            Server serv = new Server();
            Naming.rebind("RockServer", serv);
        } catch (Throwable t) {
            t.printStackTrace();
        }
    }

    public Rock getRock() {
        return new squareRock();
    }
}

客户代码:

代码语言:javascript
复制
import rocks.Rock;

import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;

public class Client {
    RemInterface reminterface = null;

    public Client() {
        String strName = "rmi://127.0.0.1/RockServer";
        try {
            reminterface = (RemInterface) Naming.lookup(strName);
        } catch (RemoteException e) {
            e.printStackTrace();
        } catch (NotBoundException e) {
            e.printStackTrace();
        } catch (MalformedURLException e) {
            e.printStackTrace();
        }
    }

    public Rock loadRock() {
        try {
            return reminterface.getRock();
        } catch (Throwable t) {
            return null;
        }
    }
}

接口:

代码语言:javascript
复制
public interface RemInterface {
    public Rock getRock() throws RemoteException;
}

在这种情况下:

" rock“类在客户机和服务器类路径中都可用。"Rock”类实现serializable.

  • The "squareRock“扩展类rock,仅在服务器的类路径.

中可用

在客户机上尝试使用Rock从loadRock()调用方法时,遇到的错误如下所示:

代码语言:javascript
复制
STDERR: java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: SquareRock

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-21 23:35:16

从服务器返回一个类型为rocks.squareRock的对象。在客户端的反序列化过程中,需要这个类来创建这个类的实例来表示来自服务器的响应。正如您已经指出的那样,类只在服务器的类路径中可用,如果找不到并加载该类,就会导致异常。

解决方案将是使rocks.squareRock类在客户机中也可用。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6085064

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档