【发布时间】:2014-10-11 19:27:31
【问题描述】:
我一直在尝试运行 RMI 示例,但在 linux 和 windows 上都出现了上述错误。我在网上看到有同样问题的人,但情况不同。
我的服务器类是:
import java.rmi.*;
import java.rmi.server.*;
public class CityServerImpl extends UnicastRemoteObject implements CityServer {
CityServerImpl() throws RemoteException {
super();
}
public String getCapital(String country) throws RemoteException {
System.out.println("Sending return string now - country requested: " + country);
if (country.toLowerCase().compareTo("usa") == 0)
return "Washington";
else if(country.toLowerCase().compareTo("ireland") == 0)
return "Dublin";
else if (country.toLowerCase().compareTo("france") == 0)
return "Paris";
return "Don't know that one!";
}
public static void main(String args[]) {
try {
System.setSecurityManager(new RMISecurityManager());
System.out.println("Security manager set");
CityServerImpl cityServer = new CityServerImpl();
System.out.println("Instance of City Server created");
Naming.rebind("Capitals", cityServer);
System.out.println("Name rebind completed");
System.out.println("Server ready for requests!");
} catch(Exception exc) {
System.out.println("Error in main - " + exc.toString());
}
}
}
我把接口、CityServer类和我的客户端类放到一个文件夹里,把下面的放到终端里。
javac -cp . *.java
rmic CityServerImpl
rmiregistry &
java CityServerImpl
然后我回来了:
Security manager set
Instance of City Server created
Error in main - java.security.AccessControlException: access denied ("java.net.SocketPermission" "127.0.0.1:1099" "connect,resolve")
'Naming.rebind("Capitals", cityServer);'似乎是问题所在。我发现提到了一个策略文件,但有人告诉我,如果没有这个文件应该可以正常运行。客户端和服务器都将在同一台 PC 上运行。关于如何解决这个问题的任何想法?
【问题讨论】: