为 rmiregistry 实例化服务器类时出现运行时异常
Posted
技术标签:
【中文标题】为 rmiregistry 实例化服务器类时出现运行时异常【英文标题】:Runtime Exception while instantiating Server class for rmiregistry 【发布时间】:2011-06-14 08:30:10 【问题描述】:我在我的 Ubuntu VM 上尝试了相同的程序,该程序甚至产生了正确的输出,但在 Windows 上它给出了一个奇怪的运行时异常:
e:\java\rmi 最终>javac *.java e:\java\rmi final>rmic ServerImplement e:\java\rmi 最终>rmiregistry 20361 > e:\java\rmi final>java ServerMain 20361 java.rmi.ServerException:服务器线程发生RemoteException; 嵌套异常是: java.rmi.UnmarshalException:解组参数错误; 嵌套异常是: java.lang.ClassNotFoundException: ServerImplement_Stub 在 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:885) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 在 java.lang.Thread.run(Thread.java:619) 在 sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(未知来源) 在 sun.rmi.transport.StreamRemoteCall.executeCall(未知来源) 在 sun.rmi.server.UnicastRef.invoke(未知来源) 在 sun.rmi.registry.RegistryImpl_Stub.rebind(未知来源) 在 java.rmi.Naming.rebind(未知来源) 在 ServerMain.main(ServerMain.java:9) 引起:java.rmi.UnmarshalException:错误解组参数;嵌套异常是: java.lang.ClassNotFoundException: ServerImplement_Stub 在 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:885) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) 在 java.lang.Thread.run(Thread.java:619) 引起:java.lang.ClassNotFoundException:ServerImplement_Stub 在 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:306) 在 java.lang.ClassLoader.loadClass(ClassLoader.java:251) 在 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) 在 java.lang.Class.forName0(本机方法) 在 java.lang.Class.forName(Class.java:247) 在 sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:434) 在 sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165) 在 java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620) 在 java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247) 在 sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197) 在 java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575) 在 java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496) 在 java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732) 在 java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329) 在 java.io.ObjectInputStream.readObject(ObjectInputStream.java:351) ... 12 更多这是我的ServerMain
课程:
import java.io.*;
import java.rmi.*;
class ServerMain
public static void main(String[] args)
try
Naming.rebind("//localhost:"+args[0]+"/TestClass",new ServerImplement());
System.out.println("TestClass is uploaded on the server. on port "+args[0]);
catch(Exception e)
//System.out.println("FAILED. ERROR: ");
e.printStackTrace();
在 Ubuntu 上:
machine@ubuntu:~/rmi final$java ServerMain 20361 TestClass 被上传到服务器上。在端口 20361【问题讨论】:
【参考方案1】:您忘记指定-cp
开关。 JVM 真的不知道你的存根在哪里。
【讨论】:
在我看来代码与执行尝试位于同一目录中,所以那里不需要类路径,对吧? 尝试使用 -cp 。和 -classpath 。 bt 没有成功。它仍然显示相同的错误。 :-/【参考方案2】:知道了。 -cp 开关也没有帮助.. 添加了一个“;”后 ”。”在我的 CLASSPATH 环境变量中。愚蠢的问题.. x-(
【讨论】:
以上是关于为 rmiregistry 实例化服务器类时出现运行时异常的主要内容,如果未能解决你的问题,请参考以下文章
将模型从 tensorflow 转换为 Coreml (4.0) 时出现实例归一化错误
为啥在尝试将 Hibernate Spatial 用于 Spring Boot 项目时出现此错误?实例化异常