java rmi:访问控制异常,访问被拒绝

java rmi:访问控制异常,访问被拒绝,java,eclipse,rmi,javac,Java,Eclipse,Rmi,Javac,我正在浏览sun网站上的教程,尝试使用RMI 但当我尝试启动服务器时,出现以下错误: ComputeEngine exception: java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve") at java.security.AccessControlContext.checkPermission(AccessC

我正在浏览sun网站上的教程,尝试使用RMI

但当我尝试启动服务器时,出现以下错误:

ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
    at java.security.AccessController.checkPermission(AccessController.java:559)
    at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
    at java.lang.SecurityManager.checkConnect(SecurityManager.java:1051)
    at java.net.Socket.connect(Socket.java:574)
    at java.net.Socket.connect(Socket.java:528)
    at java.net.Socket.<init>(Socket.java:425)
    at java.net.Socket.<init>(Socket.java:208)
    at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:40)
    at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:146)
    at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:613)
    at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:216)
    at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:202)
    at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:340)
    at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
    at engine.ComputeEngine.main(ComputeEngine.java:31)
这是项目目录的树:

/home/jenia/Documents/eclipse/workspace/asti01$ tree
.
├── bin
│   ├── client
│   │   ├── ComputePi.class
│   │   └── Pi.class
│   ├── compute
│   │   ├── Compute.class
│   │   └── Task.class
│   └── engine
│       └── ComputeEngine.class
└── src
    ├── client
    │   ├── ComputePi.java
    │   └── Pi.java
    ├── compute
    │   ├── Compute.java
    │   └── Task.java
    ├── compute.jar
    └── engine
        └── ComputeEngine.java
这是文件夹~/public\u html的树

/home/jenia/public_html/
└── classes
    ├── client
    │   └── Pi.class
    └── compute.jar

如果您的RMI注册表服务器在本地主机上运行,则应使用
127.0.0.1
而不是
127.0.1.1

启动
ComputePi时传入
127.0.0.1


  • 最初问题的答案是RMI中的EOFEException通常是由另一端的SecurityManager问题引起的。在没有代码库和安全管理器的情况下尝试

  • 第二个问题的答案是注册表没有运行,getRegistry()没有启动它。createRegistry()可以

  • 你问题的第三个版本的答案与第一个版本的答案相同

  • 当您越过所有这些,进入下一个错误时(在绑定时无疑是
    ClassNotFoundException
    ),解决方案是使用正确的类路径运行注册表

  • 当您越过该错误进入下一个错误时,查找时无疑将出现
    ClassNotFoundException
    ,解决方案是使用正确的类路径运行客户端


  • 重申@EJP的原始评论:


    忽略教程中与配置/使用SecurityManager相关的所有内容。不要尝试使用远程代码加载。这些“功能”大大增加了使用rmi的复杂性,99%的用户实际上并不需要它们。

    rmi中的EOFEException通常是由另一端的SecurityManager问题引起的。你能在没有代码库和安全管理器的情况下试试吗?我不明白你的意思。如果你不理解“没有代码库和安全管理器”,我就无法帮助你进一步回答你的老问题。你的新问题完全不同:见下文。好吧,我修正了这个问题。你认为问题出在哪里?为什么我会得到异常?你完全改变了它。它一开始是一个EOFEException;然后它变成了一个例外;现在是AccessControlException。毫无疑问,当你过去的时候,你会再次改变它。对不起,我不明白。在哪里传递?当我在shell中执行命令时?如果是,怎么做?你不知道你是如何运行自己的程序的?不,我知道。我不知道如何将参数传递给程序和java虚拟机。但是现在我正在使用eclipse,并且有文本字段用于此。但是我仍然得到相同的错误(在ip 127.0.0.1上)另一个错误,比如什么?这个问题越来越荒谬了。为了清楚起见,也为了未来读者的帮助,这就是你第二个问题的答案。你现在至少有第三次了。奇怪的是,我最初关于删除安全管理器和代码库的评论仍然适用。我完全同意。遗憾的是,几小时前我说了完全相同的话,但没有任何效果。@EJP-ha,看到了你的答案,但没有阅读OP上的所有评论。更新。
    /home/jenia/Documents/eclipse/workspace/asti01$ tree
    .
    ├── bin
    │   ├── client
    │   │   ├── ComputePi.class
    │   │   └── Pi.class
    │   ├── compute
    │   │   ├── Compute.class
    │   │   └── Task.class
    │   └── engine
    │       └── ComputeEngine.class
    └── src
        ├── client
        │   ├── ComputePi.java
        │   └── Pi.java
        ├── compute
        │   ├── Compute.java
        │   └── Task.java
        ├── compute.jar
        └── engine
            └── ComputeEngine.java
    
    /home/jenia/public_html/
    └── classes
        ├── client
        │   └── Pi.class
        └── compute.jar