0
我一直在過去一週內構建了一個RMI應用程序,並且我遇到了一個障礙,沒有任何Google搜索似乎可以提供幫助。RMI ClassNotFoundException
下面的代碼用於通過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」類實現了可序列化。
- 「squareRock」擴展了class Rock,只能在服務器的類路徑中使用。
試圖在客戶端調用使用來自搖滾loadRock()方法時,我得到的錯誤如下:
STDERR: java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: SquareRock
任何幫助,將不勝感激。