1.把应用打包(打成可执行的jar),有打包前生成代理/存根(xx_Skel.class/_Stub.class)了吗?包中必需有这两个class文件,RMI才可以正常运行。
  在JB中配置生成代理/存根操作如下:
    JB-->工程栏-->选中要生成代理/存根的java文件-->右击-->Properties-->Build-->选中Generate RMI Stub/Skelecton(Option参数楼主可以自己作选择)2.通过代码来注册RMI服务端口,只要程序不停Registry也不会自动停,程序结束时,Registry会自动注销。
  java.rmi.registry.LocateRegistry.createRegistry(10000);

解决方案 »

  1.   

    TO:GJA106(中文字符) 
    不是RMIRegistry的问题,因为在RMI运行的时候虚拟机会起动一个RMIServer来管理,
    RMIServer并不知道当前的ClassPath,即使是代码中检索一个类是否可疑加载,但是
    如果不指定RMIServer的ClassPath也是一样无法找到类的,这时RMI比较难搞的原因之一
    如果能够,一个方法是在RMIRegister起动的时候指定Codebase这个是成功的,在注册
    对象的时候指定,但是对于用户来说还是太过于复杂.
      

  2.   

    不可能。我们的产品也用到RMI,所有类包括:代理/存根都打到包中,没有出现楼主所说的现象?
    跟RMIServer没有直接的关系。
      

  3.   

    RMI在注册对象的时候,需要将存根做为一个shadow,并切根据shadow来实例化具体的实现啊,因此RMIServer是需要知道存根的存在的,打包的时候,存根和/代理都被打包进了jar,但是jb生成的,MANIFEST.MF中没有相应的指定虚拟机参数,因此在运行的时候是会产生无法找到存根和代理的情况的。
      

  4.   

    其实是这个样子的,我们在另外的一个包中定义了一组类,我想使用他们来作为方RMI中使用的类型,因此才会残生,其他东西找不到。
      

  5.   

    可以指定java.rmi.server.codebase="file://..xxx.jar" 来实现这个功能