JAVA RMI无法远程调用。

问题描述

我把一个RMI的CLIENT调用类放在SERVER的工程里执行可以正常调用,但是如果把它拷到一个新项目中却无法执行,代码如下://服务器代码packageserver;importjava.rmi.Remote;importjava.rmi.RemoteException;publicinterfaceSayHelloextendsRemote{//需要从Remote继承publicStringsayHello(Stringinfo)throwsRemoteException;//需要抛出remote异常n;}packageserver;importjava.rmi.RemoteException;importjava.rmi.server.UnicastRemoteObject;publicclassSayHelloImplextendsUnicastRemoteObjectimplementsSayHello{protectedSayHelloImpl()throwsRemoteException{super();//TODOAuto-generatedconstructorstub}publicStringsayHello(Stringinfo)throwsRemoteException{return"hello="+info;}}packageserver;importjava.rmi.*;importjava.net.*;publicclassSayRmiServer{publicSayRmiServer(){}publicstaticvoidmain(Stringargs[])throwsRemoteException,MalformedURLException{SayHelloImpladd=newSayHelloImpl();Naming.rebind("RMI_Test_2",add);}}//客户端代码,接口文件就不重复拷了packageclient;importjava.net.MalformedURLException;importjava.rmi.Naming;importjava.rmi.NotBoundException;importjava.rmi.RemoteException;importserver.SayHello;publicclassSayRmiClient{publicSayRmiClient(){}publicstaticvoidmain(Stringargs[])throwsRemoteException,MalformedURLException,NotBoundException{Stringurl="rmi://110.64.89.140"+"/RMI_Test_2";SayHelloadd=(SayHello)Naming.lookup(url);Stringresult=add.sayHello("hubin");System.out.println(result);}}

执行后抛出如下异常:Exceptioninthread"main"java.rmi.UnmarshalException:errorunmarshallingreturn;nestedexceptionis:java.lang.ClassNotFoundException:server.SayHello(nosecuritymanager:RMIclassloaderdisabled)atsun.rmi.registry.RegistryImpl_Stub.lookup(UnknownSource)atjava.rmi.Naming.lookup(UnknownSource)atclient.SayRmiClient.main(SayRmiClient.java:22)Causedby:java.lang.ClassNotFoundException:server.SayHello(nosecuritymanager:RMIclassloaderdisabled)atsun.rmi.server.LoaderHandler.loadProxyClass(UnknownSource)atjava.rmi.server.RMIClassLoader$2.loadProxyClass(UnknownSource)atjava.rmi.server.RMIClassLoader.loadProxyClass(UnknownSource)atsun.rmi.server.MarshalInputStream.resolveProxyClass(UnknownSource)atjava.io.ObjectInputStream.readProxyDesc(UnknownSource)atjava.io.ObjectInputStream.readClassDesc(UnknownSource)atjava.io.ObjectInputStream.readOrdinaryObject(UnknownSource)atjava.io.ObjectInputStream.readObject0(UnknownSource)atjava.io.ObjectInputStream.readObject(UnknownSource)...3more

解决方案

解决方案二:
server.SayHello要拷贝到客户端,且要实现系列化implementsSerializable
解决方案三:
引用1楼nanman的回复:

server.SayHello要拷贝到客户端,且要实现系列化implementsSerializable

+1另外你可以把服务端通信需要用到的类生成jar文件给客户端就可以了。
解决方案四:
引用1楼nanman的回复:

server.SayHello要拷贝到客户端,且要实现系列化implementsSerializable

+1

时间: 2024-10-27 13:06:13

JAVA RMI无法远程调用。的相关文章

Java RMI 简单示例

示例 RMI是Java平台实现远程调用的规范,下面是一个小例子,本机测试通过 一共有三个java类,远程接口,服务端程序,客户端程序 远程接口: import java.rmi.*; public interface HelloIn extends java.rmi.Remote{ String sayHello() throws RemoteException;} 服务端程序: import java.rmi.*;import java.net.*;import java.rmi.regist

十分钟学会Java RMI

RMI是Java平台实现远程调用的规范,下面是一个小例子,本机测试通过 一共有三个java类,远程接口,服务端程序,客户端程序 远程接口: import java.rmi.*; public interface HelloIn extends java.rmi.Remote{ String sayHello() throws RemoteException; } 服务端程序: /** * author by http://www.bt285.cn http://www.5a520.cn */ i

Java RMI(远程方法调用) 实例与分析 (转)

目的: 通过本文,可以加深对Java RMI的理解,知道它的工作原理,怎么使用等. 也为了加深我自己的理解,故整理成文.不足之处,还望指出. 概念解释: RMI(RemoteMethodInvocation):远程方法调用,顾名思义,通过远程的方式调用非本地对象的方法并返回结果.使用远程调用通常解决本地计算瓶颈问题,例如分布式记算,最近很火的阿尔法狗人机大战,据说运算使用上千个CPU. JRMP(java remote method protocol):java远程方法协议,这是完成java到j

rmi-如何使用ant+maven实现远程调用接口

问题描述 如何使用ant+maven实现远程调用接口 该如何用ant+maven来实现rmi接口远程调用?也就是说在java工程里写业务代码,然后在web工程里通过远程调用java工程里的方法?请指教

基于Dubbo的Hessian协议实现远程调用

Dubbo基于Hessian实现了自己Hessian协议,可以直接通过配置的Dubbo内置的其他协议,在服务消费方进行远程调用,也就是说,服务调用方需要使用Java语言来基于Dubbo调用提供方服务,限制了服务调用方.同时,使用Dubbo的Hessian协议实现提供方服务,而调用方可以使用标准的Hessian接口来调用,原生的Hessian协议已经支持多语言客户端调用,支持语言如下所示: Java:http://hessian.caucho.com/#Java Flash/Flex:http:/

Java中RMI远程调用

Java远程方法调用,即Java RMI(Java Remote Method Invocation)是Java编程语言里,一种用于实现远程过程调用的应用程序编程接口.它使客户机上运行的程序可以调用远程服务器上的对象.远程方法调用特性使Java编程人员能够在网络环境中分布操作.RMI全部的宗旨就是尽可能简化远程接口对象的使用. Java RMI极大地依赖于接口.在需要创建一个远程对象的时候,程序员通过传递一个接口来隐藏底层的实现细节.客户端得到的远程对象句柄正好与本地的根代码连接,由后者负责透过

用RMI进行远程方法调用

远程方法调用(RMI)机制可以把面向对象的思想进一步扩展,因为你可以调用的对象不仅可以在本机上,也可以在别的主机上.本文就简单介绍rmi的编程方法. 首先介绍一些简单的rmi的概念. 1,服务器和客户:在rmi中,如果有一个对象进行远程方法调用,这个对象就叫做客户机对象,而远程对象则被称为服务器对象. 2,创建服务器对象的服务器程序:这个程序用来创建服务器对象,注册这个对象,使得客户可以通过注册的名称访问服务器对象. 3,接口(interface),接口可以让客户端了解服务器所能做的工作.更具体

java远程调用powershell,有熟悉的么

问题描述 java远程调用powershell,有熟悉的么 如题,最近在调试java远程调用powershell,有熟悉的大神指教一下么,如果方便希望加我QQ 2844801761 一起交流一下! 解决方案 Java rmi 远程调用通过java反射调用远程方法java远程调用之spring和hessian

java如何远程调用linux的命令或者脚本

Java通过SSH2协议执行远程Shell脚本(ganymed-ssh2-build210.jar) 使用步骤如下: 1.导包 官网下载: http://www.ganymed.ethz.ch/ssh2/ maven坐标: <dependency> <groupId>com.ganymed.ssh2</groupId> <artifactId>ganymed-ssh2-build</artifactId> <version>210&l