实例化 rmiregistry 的服务器类时出现运行时异常

发布于 2024-10-13 06:24:11 字数 4888 浏览 5 评论 0原文

我在 Ubuntu VM 上尝试了相同的程序,该程序甚至产生了正确的输出,但在 Windows 上它给出了一个奇怪的运行时异常:

e:\java\rmi final>javac *.java
e:\java\rmi final>rmic ServerImplement
e:\java\rmi final>rmiregistry 20361  
<< BLANK , fine >>
e:\java\rmi final>java ServerMain 20361  
java.rmi.ServerException: RemoteException occurred in server thread;   
nested exception is:     
     java.rmi.UnmarshalException: error unmarshalling arguments;   
nested exception is:  

        java.lang.ClassNotFoundException: ServerImplement_Stub
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)  
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)  
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)  

        at java.lang.Thread.run(Thread.java:619)  
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)  
        at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
        at sun.rmi.server.UnicastRef.invoke(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
        at java.rmi.Naming.rebind(Unknown Source)
        at ServerMain.main(ServerMain.java:9)  
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

        java.lang.ClassNotFoundException: ServerImplement_Stub
        at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        at java.lang.Thread.run(Thread.java:619)

Caused by: java.lang.ClassNotFoundException: ServerImplement_Stub

        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:434)
        at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
        at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
        at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
        at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        ... 12 more

这是我的 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 is uploaded on the server. on port 20361

I tried the same program on my Ubuntu VM and the program even yielded the correct output but on Windows its giving a weird runtime exception:

e:\java\rmi final>javac *.java
e:\java\rmi final>rmic ServerImplement
e:\java\rmi final>rmiregistry 20361  
<< BLANK , fine >>
e:\java\rmi final>java ServerMain 20361  
java.rmi.ServerException: RemoteException occurred in server thread;   
nested exception is:     
     java.rmi.UnmarshalException: error unmarshalling arguments;   
nested exception is:  

        java.lang.ClassNotFoundException: ServerImplement_Stub
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:396)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)  
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)  
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)  

        at java.lang.Thread.run(Thread.java:619)  
        at sun.rmi.transport.StreamRemoteCall.exceptionReceivedFromServer(Unknown Source)  
        at sun.rmi.transport.StreamRemoteCall.executeCall(Unknown Source)
        at sun.rmi.server.UnicastRef.invoke(Unknown Source)
        at sun.rmi.registry.RegistryImpl_Stub.rebind(Unknown Source)
        at java.rmi.Naming.rebind(Unknown Source)
        at ServerMain.main(ServerMain.java:9)  
Caused by: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:

        java.lang.ClassNotFoundException: ServerImplement_Stub
        at sun.rmi.registry.RegistryImpl_Skel.dispatch(Unknown Source)
        at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:386)
        at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:250)
        at sun.rmi.transport.Transport$1.run(Transport.java:159)
        at java.security.AccessController.doPrivileged(Native Method)
        at sun.rmi.transport.Transport.serviceCall(Transport.java:155)
        at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:535)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:790)
        at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:649)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
        at java.lang.Thread.run(Thread.java:619)

Caused by: java.lang.ClassNotFoundException: ServerImplement_Stub

        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:247)
        at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:434)
        at sun.rmi.server.LoaderHandler.loadClass(LoaderHandler.java:165)
        at java.rmi.server.RMIClassLoader$2.loadClass(RMIClassLoader.java:620)
        at java.rmi.server.RMIClassLoader.loadClass(RMIClassLoader.java:247)
        at sun.rmi.server.MarshalInputStream.resolveClass(MarshalInputStream.java:197)
        at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1575)
        at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
        at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
        ... 12 more

Here is my ServerMain class:

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();
   } 
 }
}

On Ubuntu:

machine@ubuntu:~/rmi final$java ServerMain 20361
TestClass is uploaded on the server. on port 20361

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

自由如风 2024-10-20 06:24:11

知道了。 -cp 开关也没有帮助..
添加了一个“;”后 ”。”在我的 CLASSPATH 环境变量中。愚蠢的问题.. x-(

Got it. The -cp switch wasnt helping either..
Added a ";" after "." in my CLASSPATH environment variable. Silly problem.. x-(

叫嚣ゝ 2024-10-20 06:24:11

您忘记指定 -cp 开关。 JVM 确实不知道你的存根在哪里。

You forgot to specify -cp switch. JVM really does not know where your stubs are.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文