不知道有人看过<<java网络高级编程>>这本书,在这本书的第二章有一个java RMI的例子,我把它抄下来了,也按步骤弄好了,但客户端在运行的时候,抛出了一个AccessControlException显示访问被拒绝,不知道怎么回事?
在客户端运行的时候,rmiregistry与服务器都已经被启动了呀。。

解决方案 »

  1.   

    这书用的是老的(JDK5之前的)技术。
    客户端启动也要用参数:
    -Djava.security.policy=你的policy文件要么就像书上那样用appletviewer来启动客户端。
      

  2.   

    代码如下:
    //Upper.java
    import java.rmi.*;public interface Upper extends Remote
    {
    String upperCase(String s)throws RemoteException;
    }
    //UpperImpl.java
    import java.rmi.*;
    import java.rmi.server.UnicastRemoteObject;public class UpperImpl extends UnicastRemoteObject implements Upper
    {
    public UpperImpl()throws RemoteException
    {
    super();
    }
    public String upperCase(String s)throws RemoteException
    {
    return s.toUpperCase();
    }
    public static void main(String[]args)
    {
    System.setSecurityManager(new RMISecurityManager());
    try
    {
    UpperImpl obj=new UpperImpl();
    Naming.rebind("UpperString",obj);

    System.out.println("UpperString bound in registry");
    }
    catch(Exception e)
    {
    System.out.println("UpperImpl err:"+e.getMessage());
    e.printStackTrace();
    }
    }
    }
    //UpperClient.java
    import java.rmi.*;
    public class UpperClient
    {
    public static void main(String[]args)
    {
    System.setSecurityManager(new RMISecurityManager());
    Upper obj=null;
    try
    {
    obj=(Upper)Naming.lookup("UpperString");
    String results=obj.upperCase("abc");
    System.out.println("Result:"+results);
    }
    catch(Exception e)
    {
    System.out.println("RMI Exception:"+e.getMessage());
    e.printStackTrace();
    }
    }
    }
    //RMIpolicy.policy
    grant
    {
    permission java.security.AllPermission;
    };
    大家看看这些代码哪儿有问题,还是其他的问题
    我的计算机上的运行结果是
    这个是客户端运行的结果:
    进行读取时出现 I/O 异常: E:\UpperClient (系统找不到指定的文件。)不知道为什么
      

  3.   

    代码没问题。
    运行方式的问题。找不到的文件是policy文件吧?
      

  4.   

    没看过<<java网络高级编程>> 不知道对J2EE程序员来说帮助大不? 我刚入行