我正在尝试运行Oracle网站http://docs.oracle.com/javase/tutorial/rmi/running.html中给出的RMI应用程序示例。 但是,尝试Eclipse和命令行,我无法运行服务器或客户端。 事实上,在Eclipse中运行时我遇到了这个错误:
ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
我也改变了这样的VM Argument:
对于ComputeEngine(服务器):
-Djava.security.manager -Djava.rmi.server.codebase = file:/Users/name/Documents/workspace/PiComputationRM/src/compute/compute.jar -Djava.security.policy = / Users / name /文档/工作区/ PiComputationRM /的server.policy
对于ComputePi(客户端):
-Djava.security.policy = /用户/名称/文件/工作区/ PiComputationRM / client.policy
我的客户端和服务器策略的内容是:
grant {
permission java.security.AllPermission;
};
当我尝试在终端中运行服务器时:
java -Djava.security.policy="server.policy" src/engine/ComputeEngine.java
我收到了这个错误:
Error: Could not find or load main class src.engine.ComputeEngine.java
请帮忙,我在互联网上花了很多时间徒劳?
答案 0 :(得分:0)
ComputeEngine exception:
java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
您正在使用安全管理器,而您尚未在.policy文件中授予该权限。
我也改变了这样的VM Argument:
对于ComputeEngine(服务器):
-Djava.security.manager -Djava.rmi.server.codebase=file:/Users/name/Documents/workspace/PiComputationRM/src/compute/compute.jar -Djava.security.policy=/Users/name/Documents/workspace/PiComputationRM/server.policy
那里有几个问题:
文件:代码库不会起作用,除非它指定一个共享位置,该名称可以通过该名称显示给客户端和注册表。这看起来不像其中之一。
您需要检查这是否是策略文件的正确名称
您甚至不需要服务器中的安全管理器或策略,除非客户端正在设置自己的代码库并且将为您提供类。在这个例子中不会发生这种情况。
对于ComputePi(客户端):
-Djava.security.policy=/Users/name/Documents/workspace/PiComputationRM/client.policy
仔细检查此名称。
当我尝试在终端中运行服务器时:
java -Djava.security.policy="server.policy" src/engine/ComputeEngine.java
我收到了这个错误:
Error: Could not find or load main class src.engine.ComputeEngine.java
当然,你做到了。您向JVM提供了编译器命令。使用教程中提供的命令。您没有将.java文件命名为JVM。
我在互联网上花了很多时间徒劳无功
您应该反复对教程进行双重检查。你至少在两个地方误读了这个教程。
我还会质疑你是否真的需要代码库功能。我首先要将它和安全管理器一起删除,然后让它在没有它们的情况下工作。对于第一个RMI项目来说,这太复杂了。