我试图运行简单的RMI服务,其中服务器和客户端在同一台机器上。不幸的是,每次我尝试运行服务器类别我收到一个异常。我将服务器和客户端保存在单独的文件夹中,并将需要的文件复制到客户端。Java:远程方法调用(RMI)
这些是我所采取的步骤:
文件夹层次结构:
服务器[AddServerIntf.class,AddServerImpl.class,AddServer.class] 客户端[AddServerIntf.class,AddClient.class]
异常
C:\Users\Szymon\Desktop\serwer>java AddServer
Exception: java.rmi.ServerException: RemoteException occurred in server thread;
nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
java.lang.ClassNotFoundException: AddServerIntf
代码
远程接口
import java.rmi.*;
public interface AddServerIntf extends Remote {
double add(double d1, double d2) throws RemoteException;
}
类,它实现接口上述
import java.rmi.*;
import java.rmi.server.*;
public class AddServerImpl extends UnicastRemoteObject
implements AddServerIntf {
public AddServerImpl() throws RemoteException {
}
public double add(double d1, double d2) throws RemoteException {
return d1 + d2;
}
}
类它创建服务器
import java.net.*;
import java.rmi.*;
public class AddServer {
public static void main(String args[]) {
try {
AddServerImpl addServerImpl = new AddServerImpl();
Naming.rebind("AddServer", addServerImpl);
}
catch(Exception e) {
System.out.println("Exception: " + e);
}
}
}
客户
import java.rmi.*;
public class AddClient {
public static void main(String args[]) {
try {
String addServerURL = "rmi://" + args[0] + "/AddServer";
AddServerIntf addServerIntf = (AddServerIntf)Naming.lookup(addServerURL);
System.out.println("1st: " + args[1]);
double d1 = Double.valueOf(args[1]).doubleValue();
System.out.println("2nd: " + args[2]);
double d2 = Double.valueOf(args[2]).doubleValue();
System.out.println("Sum: " + addServerIntf.add(d1, d2));
}
catch(Exception e) {
System.out.println("Exception: " + e);
}
}
}
与存根文件的作用是相似的
C:\Users\Szymon\Desktop\serwer>java AddServer
Exception: java.rmi.ServerException: RemoteException occurred in server thread;
nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested excep
tion is:
java.lang.ClassNotFoundException: AddServerImpl_Stub
+1的细节和格式。 java.lang中。ClassNotFoundException:AddServerIntf,看起来你有一些类路径问题。你确定“存根”在类路径中吗? – kosa
细节不足。你需要显示*完整的堆栈跟踪,而不仅仅是最高位。 – EJP
@EJP这就是我得到的。我会尽力提供更多细节。 – ashur