我正在差异物理机上的2个JVM上运行程序here。我收到了错误
RemoteException
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: CalculatorImpl_Stub (no security manager: RMI class loader disabled)
我甚至尝试在同一台机器上运行它(未更改的程序)并且它可以工作,但它在diff机器上不起作用。有人可以帮助我吗?
@ beny23-谢谢,但我仍然得到这个错误:
RemoteException
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: CalculatorImpl_Stub
客户端如何拥有CalculatorImpl_stub的副本?
答案 0 :(得分:12)
我遇到了这个问题,因为我在客户端和服务器代码中有不同的包名:
package my.pkg;
// server side interface definition...
// ------------- //
package my.pkg.something;
// client side interface definition...
我更改了客户端软件包的名称,并将其设置为服务器端软件包的名称:
package my.pkg;
// server side interface definition...
// ------------- //
package my.pkg; // renamed to the name of package in server-side .
// client side interface definition...
问题消失了。
答案 1 :(得分:9)
我的Java类有RMI Client
和Server
。我决定将它们放在自己的包中,而不是作为默认包运行。
将它们放入自己的包中后,在连接时发生java.rmi.UnmarshalException: error unmarshalling return; nested exception is: java.lang.ClassNotFoundException:
错误。
我把程序放回到默认包中,它们都重新开始工作了。
我意识到这可能是技术上的原因,但这对我有用!
答案 2 :(得分:7)
听起来你没有使用安全管理器:
您是否有政策文件(my.policy
):
grant {
permission java.security.AllPermission;
};
并使用
运行您的程序java -Djava.security.manager -Djava.security.policy=/some/path/my.policy MyClass
答案 3 :(得分:2)
有三种情况。
如果在绑定到注册表时遇到错误,则注册表无法在其类路径或代码库功能上访问该类。
如果在查找注册表时遇到错误,则客户端无法在其类路径上或通过代码库功能访问该类。
如果您正在使用代码库功能,那么反过来可能是由于注册表在其类路径上具有访问该类的权限,这导致它不使用代码库,这会导致丢失了代码库注释,因此您的客户端不知道如何使用该类的代码库。
如果您没有使用代码库功能,请忽略上一段; - )
答案 4 :(得分:0)
我用重命名包名解决了它。服务器和客户端在两个不同的项目中,而是使用相同的包命名。