老兄,弟二次使用这个命令的时候就会出现这个问题。
检察你的系统进程中是否已经有了一个rmiregistry???

解决方案 »

  1.   

    端口已经被占用异常--第一次使用的RMI端口没有释放。
    楼主应该考虑用程序来注册RMI的端口号
     java.rmi.registry.LocateRegistry.createRegistry(35687);
      

  2.   

    问题是我用的程序是1882端口,下面是测试程序:
    import java.rmi.Naming;
    public class rmiserver1bind
    {
    public rmiserver1bind()
    {
    try
    {
    rmiserver1 s=new rmiserver1pro();
    Naming.rebind("rmi://10.204.6.35:1882/rmiservice1",s);
    }
    catch(Exception e)
    {
    System.out.println("Excetion :"+e);

    }
    }
    public static void main (String args[])
    {
    new rmiserver1bind();
    }
    }
    import java.io.IOException;
    import java.rmi.*;
    import java.util.*;
    import javax.rmi.*;public class rmiclient1
    {
    public rmiclient1()
    {
    }

    public static void main(String[] args)throws Exception
    {
    try
    {
    rmiserver1 rs1=(rmiserver1)Naming.lookup("rmi://10.204.6.35:1882/rmiservice1");
    testobject1  obj1=new testobject1("new1","new2");
    Object  obj2=rs1.remotemethod1(obj1);
    testobject2 obj3=(testobject2)obj2;
    System.out.println(obj1.getvalue());
    System.out.println(obj3.obj2getvalue());

    }
    catch(Exception e)
    {
    System.out.println("Exception:"+e);
    }
    }
    }
    import java.rmi.*;
    import java.rmi.server.*;public class rmiserver1pro extends UnicastRemoteObject implements rmiserver1
    {
    public rmiserver1pro() throws RemoteException
    {
    super();
    }
    public Object remotemethod1(Object obj)        //没有throw exception
    {
    testobject1 obj1=(testobject1)obj;
    testobject2 obj2=new testobject2(obj1.getstr1(),obj1.getstr2(),3);
    return obj2;
    }
    }
    import java.rmi.*;
    public interface rmiserver1 extends Remote
    {
    Object remotemethod1(Object obj)throws RemoteException;
    }
    import java.io.*;
    public class testobject1 implements Serializable
    {
    String s1="";
    String s2="";
    public testobject1(String str1,String str2)
    {
    s1=str1;
    s2=str2;

    }
    public void putvalue(String str1,String str2)
    {
    s1=str1;
    s2=str2;
    }
    public String getvalue()
    {
    return s1+s2;
    }
    public String getstr1()
    {
    return s1;
    }
    public String getstr2()
    {
    return s2;
    }}
    import java.io.*;
    public class testobject2 implements Serializable
    {
    String s1="";
    String s2="";
    int   i=0;
    public testobject2(String str1,String str2,int c)
    {
    s1=str1;
    s2=str2;
    i=c;
    }
    public void obj2putvalue(String str1,String str2,int c)
    {
    s1=str1;
    s2=str2;
    i=c;
    }
    public  String obj2getvalue()
    {
    return s1+s2+String.valueOf(i);
    }
    public String obj2getstr1()
    {
    return s1;
    }
    public String obj2getstr2()
    {
    return s2;
    }
    }
    还请各位高手指点
      

  3.   

    1. 不知道你是怎么运行rmiregistry命令的。1099端口是RMI默认端口,也就是说只运行rmiregistry不加端口号(rmiregistry 1882),那rmiregistry打开的1099端口而不是1882;同时,一台机器上同一端口号只能注册一次。2.不支持你使用rmiregistry注册,而是程序注册java.rmi.registry.LocateRegistry.createRegistry(1882);