Java 调用远程方法时出错
我试图使用RMI在远程服务器上调用fibonacci方法,但当我试图在客户端通过给该方法一个整数值来调用该方法时,会出现以下错误:Java 调用远程方法时出错,java,client-server,rmi,Java,Client Server,Rmi,我试图使用RMI在远程服务器上调用fibonacci方法,但当我试图在客户端通过给该方法一个整数值来调用该方法时,会出现以下错误: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: unrecognized method hash: method not supported by remote obje
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: unrecognized method hash: method not supported by remote object
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)
at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at com.sun.proxy.$Proxy0.fibonacciArrayTest(Unknown Source)
at ie.gmit.FibonacciClient.main(FibonacciClient.java:37)
有人知道我在这个实现中哪里出了问题吗
这是RMI应用程序的客户端:
//get user input
Scanner user_input = new Scanner(System.in);
String fibMaxNum;
System.out.println("Enter the max fibonacci number: ");
fibMaxNum = user_input.next();
int fibMax = Integer.parseInt(fibMaxNum);
//Get Fibonacci array.
int[] sequence = power_proxy.fibonacciArrayTest(fibMax);
for (int value : sequence) {
System.out.println(value);
}
这是服务器端的实现,我在这里也得到了一个错误返回类型与IPower.fibonacciarrytest(int)
不兼容。我由此推断,我没有在IPower
接口中指定正确的返回类型,但是我如何更正签名来解决这个问题?我是否应将I电源中的方法更改为:
public int[] fibonacciArrayTest(int n) {
int a = 0;
int b = 1;
int[] sequence = new int[n];
// Fill array with Fibonacci values.
for (int i = 0; i < n; i++) {
sequence[i] = a;
int temp = a;
a = b;
b = temp + b;
}
return sequence;
}
您已在部署后更改了远程方法签名
清理、重建并重新部署到客户端和服务器,同时不要忘记重新启动注册表。部署后,您已经更改了远程方法签名
清理、重建并重新部署到客户端和服务器,同时不要忘记重新启动注册表。部署后,您已经更改了远程方法签名
清理、重建并重新部署到客户端和服务器,同时不要忘记重新启动注册表。部署后,您已经更改了远程方法签名
清理、重建并重新部署到客户端和服务器,不要忘记重新启动注册表。注意:描述和回答问题所需的所有信息必须包含在问题本身中。你提供的pastebin链接是毫无意义的浪费时间。被@RambabuMandalapu删除的答案确实是一个答案。只是回答错了。奇怪的评论。注意:描述和回答问题所需的所有信息都必须包含在问题本身中。你提供的pastebin链接是毫无意义的浪费时间。被@RambabuMandalapu删除的答案确实是一个答案。只是回答错了。奇怪的评论。注意:描述和回答问题所需的所有信息都必须包含在问题本身中。你提供的pastebin链接是毫无意义的浪费时间。被@RambabuMandalapu删除的答案确实是一个答案。只是回答错了。奇怪的评论。注意:描述和回答问题所需的所有信息都必须包含在问题本身中。你提供的pastebin链接是毫无意义的浪费时间。被@RambabuMandalapu删除的答案确实是一个答案。只是回答错了。奇怪的评论。
public interface IPower extends Remote{
//Declare available methods and must throw RemoteException
int[] fibonacciArrayTest(int fibMax) throws RemoteException;
}