public static void main(String argv[]) {
if(System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try {
LocateRegistry.createRegistry(1099);
FileInterface fi = new FileImpl("FileServer");
Naming.rebind("FileServer", fi);//假定RMI 注册表在缺省的端口号1099上运行,如果RMI注册表在其他端口号上运行, 就必须在这一句中指定端口号。
//Naming.rebind("//127.0.0.1:4500/FileServer", fi) //端口号4500
//假定rmi注册表和服务器是在同一台电脑上运行。如果不是这样,需要修改rebind方法中的地址即可。
System.out.println("Ready to do Time");
} catch(Exception e) {
System.out.println("FileServer: "+e.getMessage());
e.printStackTrace();
}
如果运行时,出现以下错误:
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkConnect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at java.net.Socket.<init>(Unknown Source)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
at sun.rmi.server.UnicastRef.newCall(Unknown Source)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Unknown Source)
at server.FileServer.main(FileServer.java:18)
FileServer: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
解决方法:
在运行java所使用的jre目录下,找到java.polecy文件,
例如:D:/java/JRE/lib/security/java.policy