gpt4 book ai didi

java - RMI ClassNotFoundException 异常

转载 作者:行者123 更新时间:2023-11-29 08:13:48 26 4
gpt4 key购买 nike

在过去的一周里,我一直在构建一个 RMI 应用程序,但我遇到了一个障碍,似乎再多的谷歌搜索也无济于事。

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

服务器代码:

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();
}
}

客户端代码:

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;
}
}
}

接口(interface):

public interface RemInterface {
public Rock getRock() throws RemoteException;
}

在这种情况下:

  • “Rock”类在客户端和服务器类路径中均可用。
  • “Rock”类实现可序列化。
  • “squareRock”扩展类 rock 并且仅在服务器的类路径中可用。

我在客户端尝试使用来自 loadRock() 的 Rock 调用方法时遇到的错误如下:

STDERR: java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: SquareRock

如有任何帮助,我们将不胜感激。

最佳答案

您正在从服务器返回类型为 rocks.squareRock 的对象。在客户端的反序列化过程中,将需要此类来创建此类的实例来表示来自服务器的响应。正如您已经指出该类仅在服务器的类路径中可用,定位和加载所述类失败会导致异常。

解决办法是使 rocks.squareRock 类也可用于客户端。

关于java - RMI ClassNotFoundException 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6085064/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com