我正在尝试设置一个曾经有效但现在出现奇怪行为的 RMI 应用程序。当我在没有存根的情况下运行它时,我得到 java.lang.ClassNotFoundException: HelloInterface 然后我将一个新文件 (Hello_Stub) 添加到目录中(通过使用 rmic),然后我得到 java.lang.ClassNotFoundException: Hello_Stub
怎么回事??当它丢失时,它并没有抱怨 Hello_Stub 丢失;但是当我添加该文件时,它开始抱怨它不存在。嗯?
下面是来自终端的成绩单。首先你会看到一个错误;然后我列出当前目录中的文件;然后我生成存根文件并向您展示;然后你会看到它抱怨刚刚添加的文件丢失的错误:
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> java HelloServer
initializing Hello class: Hello, world!
Hello Server failed: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: HelloInterface
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> ll
total 32
-rw------- 1 sjudd sjudd 765 Oct 25 19:52 Hello.class
-rw------- 1 sjudd sjudd 967 Oct 25 19:52 HelloClient.class
-rw-r----- 1 sjudd sjudd 614 Oct 25 19:42 HelloClient.java
-rw------- 1 sjudd sjudd 222 Oct 25 19:52 HelloInterface.class
-rw-r----- 1 sjudd sjudd 360 Oct 25 09:08 HelloInterface.java
-rw-r----- 1 sjudd sjudd 847 Oct 25 09:56 Hello.java
-rw------- 1 sjudd sjudd 916 Oct 25 19:52 HelloServer.class
-rw-r----- 1 sjudd sjudd 439 Oct 25 09:14 HelloServer.java
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> rmic Hello
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> ll
total 36
-rw------- 1 sjudd sjudd 765 Oct 25 19:52 Hello.class
-rw------- 1 sjudd sjudd 967 Oct 25 19:52 HelloClient.class
-rw-r----- 1 sjudd sjudd 614 Oct 25 19:42 HelloClient.java
-rw------- 1 sjudd sjudd 222 Oct 25 19:52 HelloInterface.class
-rw-r----- 1 sjudd sjudd 360 Oct 25 09:08 HelloInterface.java
-rw-r----- 1 sjudd sjudd 847 Oct 25 09:56 Hello.java
-rw------- 1 sjudd sjudd 916 Oct 25 19:52 HelloServer.class
-rw-r----- 1 sjudd sjudd 439 Oct 25 09:14 HelloServer.java
-rw------- 1 sjudd sjudd 1635 Oct 25 20:34 Hello_Stub.class
sjudd@kearnsgroup:/kearnsgroup/www/RMItest/classes> java HelloServer
initializing Hello class: Hello, world!
Hello Server failed: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: Hello_Stub
请注意,这里失败的是 rmi SERVER,而不是客户端。
这段代码在一台机器(Mac)上运行良好,但是当复制到另一台机器(Linux)时,它会抛出这个惊人的错误。
我被这种奇怪的感觉吓坏了,我不知道如何处理它。这可能与解组步骤有关吗?还是使用环境变量?也许是类路径?我看不出要寻找什么。有什么疯狂的理论吗?