RMI简单程序,运行不了,帮忙看看
远程接口程序:
package helloWorld;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface Hello extends Remote {
String sayHello() throws RemoteException;
}
远程接口实现:
package helloWorld;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.RMISecurityManager;
import java.rmi.server.UnicastRemoteObject;
public class HelloImpl extends UnicastRemoteObject implements Hello {
public HelloImpl() throws RemoteException{
super();
}
public String sayHello() {
return "Hello RMI World!";
}
public static void main(String[] args) {
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
try {
HelloImpl obj = new HelloImpl();
Naming.rebind("//localhost:1099/HelloServer",obj);
System.out.println("HelloServer bound in registry!");
}catch (Exception e) {
System.out.println("HelloImpl err"+e.getMessage());
e.printStackTrace();
}
}
}
start rmiregistry后运行java helloWorld.HelloImpl就抛出异常:
HelloImpl erraccess denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:1099 connect,resolve)
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:269)
at java.security.AccessController.checkPermission(AccessController.java:401)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:524)
at java.lang.SecurityManager.checkConnect(SecurityManager.java:1026)
at java.net.Socket.connect(Socket.java:446)
at java.net.Socket.connect(Socket.java:402)
at java.net.Socket.<init>(Socket.java:309)
at java.net.Socket.<init>(Socket.java:124)
at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(RMIDirectSocketFactory.java:22)
at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(RMIMasterSocketFactory.java:128)
at sun.rmi.transport.tcp.TCPEndpoint.newSocket(TCPEndpoint.java:562)
at sun.rmi.transport.tcp.TCPChannel.createConnection(TCPChannel.java:185)
at sun.rmi.transport.tcp.TCPChannel.newConnection(TCPChannel.java:171)
at sun.rmi.server.UnicastRef.newCall(UnicastRef.java:313)
at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
at java.rmi.Naming.rebind(Naming.java:160)
at helloWorld.HelloImpl.main(HelloImpl.java:25)
大家给看看,这是什么问题?谢谢!
问题点数:50、回复次数:2Top
1 楼li_haizhou(阿土)回复于 2005-05-23 20:39:04 得分 40
删除代码:
if (System.getSecurityManager() == null) {
System.setSecurityManager(new RMISecurityManager());
}
如果你一定要使用security manager,则需要自己编辑policy文件。
具体做法找一下java相关文档,有很多介绍的。Top
2 楼kaleon(为人要厚道)回复于 2005-05-23 20:41:57 得分 10
如果是本地测试的话,是不能用localhost的,必须要用你的计算机名。Top




