在过去的一周里,我一直在构建一个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;
}
}
}接口:
public interface RemInterface {
public Rock getRock() throws RemoteException;
}在这种情况下:
" rock“类在客户机和服务器类路径中都可用。"Rock”类实现serializable.
中可用
在客户机上尝试使用Rock从loadRock()调用方法时,遇到的错误如下所示:
STDERR: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: SquareRock任何帮助都将不胜感激。
发布于 2011-05-21 23:35:16
从服务器返回一个类型为rocks.squareRock的对象。在客户端的反序列化过程中,需要这个类来创建这个类的实例来表示来自服务器的响应。正如您已经指出的那样,类只在服务器的类路径中可用,如果找不到并加载该类,就会导致异常。
解决方案将是使rocks.squareRock类在客户机中也可用。
https://stackoverflow.com/questions/6085064
复制相似问题