Java RMI,ClassNotFoundException

Java RMI,ClassNotFoundException,java,rmi,Java,Rmi,在Netbeans下,我创建了一个包含接口“I_object”的项目。该接口表示远程对象“impl_I_object”,而“impl_I_object”实现了所有接口方法。 一个主类用于客户端“main_client”,一个主类用于服务器“main_server”。。。 当我启动服务器和客户端时,它的工作会很顺利 但当我将项目分为两个项目(客户端和服务器)时,请看屏幕截图: 在这里,当我运行服务器时,它可以工作,但当我运行客户端时,它会显示以下错误: Exception in thread

在Netbeans下,我创建了一个包含接口“I_object”的项目。该接口表示远程对象“impl_I_object”,而“impl_I_object”实现了所有接口方法。 一个主类用于客户端“main_client”,一个主类用于服务器“main_server”。。。 当我启动服务器和客户端时,它的工作会很顺利

但当我将项目分为两个项目(客户端和服务器)时,请看屏幕截图:

在这里,当我运行服务器时,它可以工作,但当我运行客户端时,它会显示以下错误:

Exception in thread "main" java.rmi.UnmarshalException: error unmarshalling return; nested exception is: 
java.lang.ClassNotFoundException: server.i_object (no security manager: RMI class loader disabled)
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Naming.java:101)
at client.Main_client.main(Main_client.java:24)
    Caused by: java.lang.ClassNotFoundException: server.i_object (no security manager:  RMI class loader disabled)
at sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:554)
at java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:646)
at java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:311)
at sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:257)
at java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1549)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1511)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1750)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1347)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:369)
... 3 more
    Java Result: 1
有什么问题吗?

上面说:

没有安全管理器:RMI类加载程序已禁用

RMI需要一个安全管理器来运行

例如:

更新:
这是关于RMI中的安全性的

对我有效的方法是在每个project server和客户端中用相同的包名制作一个包中的接口副本

您尝试使用client.i_对象而不是server.i_对象。另外,请阅读Java编码惯例()。谢谢,但是当我将它们放在同一个项目中而没有安全管理器时,它是有效的,请您解释一下?-1。RMI根本不需要运行安全管理器。当且仅当您想使用代码库功能时,它需要一个安全管理器。@AdelBoutros您在评论之前是否阅读了评论?这完全不是我说的。我所说的非常清楚,我现在重复一遍。如果您想使用代码库功能,您只需要一个安全管理器。您不必使用代码库功能,即使在“将客户端与服务器分离”时也是如此。@AdelBoutros这是您在这个主题上犯的第四个错误。代码库特性引用系统属性
java.rmi.server.codebase
。如果您使远程接口类及其闭包在其类路径中对客户端和注册表可用,那么您不必使用代码库特性,这与您在这里所声称的相反。我有几十个这样的RMI部署,有单独的客户端和服务器,没有安全管理器。其中任何一个都是一个充分的反例。很明显,你对它了解不多。@AdelBoutros看一看RMI规范####3.4和5.6,在那里你将了解事情的真相。很难看出一个错误的答案对任何人都有什么用处;无论如何,这肯定不是最重要的。