亲爱的堆栈溢出用户。
我读了很多RMI注册表的问题,并尝试他们对我的问题,但没有成功。这就是我的情况,我希望有人能至少帮我一点忙。
我正在为学校的一个项目做一个多人吃豆人。需要使用java RMI,所以我创建了3个很好的jar文件。服务器(只)包含一个主类,它将内容发布到远程服务器,并加载一些东西,如地图等。客户端包含一些swing垃圾,显示一些不错的表单。第三是包含所有吃豆人代码的库。
现在当我在本地启动服务器时,它会启动一个rmiregistry并将游戏绑定到它(当然是在设置之后)。然后我把我的客户连接到它,可以很好地发挥。所有的工作,我可以开始一个视图客户端全部连接到我的本地注册表,并得到游戏对象很好。之后,我启动了独立于服务器的注册表,并再次成功运行程序。即使通过我笔记本电脑的IP(不是127.0.0.1),它也能正常工作。注意,我没有设置注册表的类路径。
所以在那之后我把东西移到服务器(2008)。我在那里启动了rmiregistry,没有类路径,并试图将server.jar连接到它,但失败了。我找不到……拼写类异常),所以我固定了类路径....没有效果....所以我打开一个新的控制台,启动一个新的注册表,将pacman.jar复制到c:,并使用-Djava.rmi.server运行server.jar。代码= c: paramether……没有效果……然后我设置了一个安全经理…(System.setSecurityManager(new RMISecurityManager());
),制定了包含:grant {permission java.security.AllPermission;};
的策略,并使用server.jar -Djava.rmi.server.codebase = c: -Djava.security.policy = server.policy……还是没有效果。
我一直得到相同的异常:
java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: Tervoort.Bram.Packman.Spel
at sun.rmi.server.UnicastServerRef.oldDispatch(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
有谁知道问题是什么吗?如何解决这个问题?
这可能也有帮助。看一下a .2。似乎不管出于什么原因。在提供的url中找不到一个/多个类。确保url格式正确,并且所有需要的类都在类路径中。
"当一个远程对象被RMI封送时(无论是作为远程调用的参数还是作为返回值),RMI将检索存根类的代码库并用于注释序列化的存根。当存根被解组时,代码库被用来使用RMIClassLoader加载存根类文件,除非类已经可以在CLASSPATH中找到,或者可以通过接收对象的上下文类加载器找到,比如applet代码库。
如果_Stub类是由RMIClassLoader加载的,那么RMI已经知道为其注释使用哪个代码库。如果_Stub类是从CLASSPATH加载的,那么就没有明显的代码库,RMI会查询java.rmi.server.codebase系统属性来查找代码库。如果没有设置system属性,那么存根将使用空代码库进行封送,这意味着它不能被使用,除非客户端在其CLASSPATH中有_Stub类文件的匹配副本。"