【发布时间】:2010-10-02 15:45:12
【问题描述】:
您好,我正在尝试运行一个将类绑定到命名服务器的 java 应用程序,但我经常收到 ClassNotFoundException
首先我启动注册表:
rmiregistry
然后从 eclipse 我尝试执行服务器但得到这个错误
java.rmi.ServerException:服务器线程发生RemoteException;嵌套异常是: java.rmi.UnmarshalException:解组参数错误;嵌套异常是: java.lang.ClassNotFoundException: progInternet2008.commons.NominabileFactory 在 sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396) 在 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250) 在 sun.rmi.transport.Transport$1.run(Transport.java:159) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.rmi.transport.Transport.serviceCall(Transport.java:155) 在 sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 在 java.lang.Thread.run(Thread.java:619) 在 sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(StreamRemoteCall.java:255) 在 sun.rmi.transport.StreamRemoteCall.executeCall(StreamRemoteCall.java:233) 在 sun.rmi.server.UnicastRef.invoke(UnicastRef.java:359) 在 sun.rmi.registry.RegistryImpl_Stub.rebind(未知来源) 在 progInternet2008.Pozzobon.tesi.Slave.main(Slave.java:54) 引起:java.rmi.UnmarshalException:错误解组参数;嵌套异常是: java.lang.ClassNotFoundException: progInternet2008.commons.NominabileFactory 在 sun.rmi.registry.RegistryImpl_Skel.dispatch(未知来源) 在 sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386) 在 sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250) 在 sun.rmi.transport.Transport$1.run(Transport.java:159) 在 java.security.AccessController.doPrivileged(本机方法) 在 sun.rmi.transport.Transport.serviceCall(Transport.java:155) 在 sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790) 在 sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 在 java.lang.Thread.run(Thread.java:619) 引起:java.lang.ClassNotFoundException:progInternet2008.commons.NominabileFactory 在 java.net.URLClassLoader$1.run(URLClassLoader.java:200) 在 java.security.AccessController.doPrivileged(本机方法) 在 java.net.URLClassLoader.findClass(URLClassLoader.java:188) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:307) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:252) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:247) 在 sun.rmi.server.LoaderHandler.loadProxyInterfaces(LoaderHandler.java:711) 在 sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:655) 在 sun.rmi.server.LoaderHandler.loadProxyClass(LoaderHandler.java:592) 在 java.rmi.server.RMIClassLoader$2.loadProxyClass(RMIClassLoader.java:628) 在 java.rmi.server.RMIClassLoader.loadProxyClass(RMIClassLoader.java:294) 在 sun.rmi.server.MarshalInputStream.resolveProxyClass(MarshalInputStream.java:238) 在 java.io.ObjectInputStream.readProxyDesc(ObjectInputStream.java:1531) 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1493) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) ... 12 更多
我已阅读 RMI Java 教程,但仍然无法正常工作...
作为 VM 参数,我设置了这个:
-Djava.rmi.server.codebase=file:${workspace_loc}/progInternet2008
请帮帮我
(我使用的是 Java 6)
【问题讨论】:
-
你最终解决了这个问题吗?
-
A 文件:codebase URL 仅在客户端和服务器在同一台机器上时有效,在这种情况下,您根本不需要 codebase 功能,或者当它引用共享驱动器时从客户端和服务器上看是一样的,这意味着一个局域网,你是否需要这个功能也是值得怀疑的。
标签: java eclipse rmi rmiregistry