2

サーバー コードを Eclipse で実行すると、次の例外が発生しました。

java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: com.RMIInterface
    at sun.rmi.server.UnicastServerRef.oldDispatch(UnicastServerRef.java:413)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:267)
    at sun.rmi.transport.Transport$1.run(Transport.java:177)

コマンド行に「start rmiregistry」と入力するだけで、RMI レジストリを開始しました。「c:\Program Files\Java\jdk1.7.0\bin\rmiregistry.exe」という見出しの新しいウィンドウが開きます。このパスには、JDK しかありません。

このパスで利用可能なすべての .class ファイル: D:\Workspace\Study\bin\com.

com フォルダの下に、「RMIInterface、RMIServer、RMIClient」という 3 つのファイルすべてがあります。

Eclipse からサーバー コードを実行すると、上記の例外が発生しました。(つまり) RMIInterface が見つかりません。しかし、私は同じフォルダにそれを持っています。

サーバーを実行するには、他に何をすればよいですか?

これは私のサーバーコードです:

RMIServer serRef = new RMIServer();
try {
    RMIInterface inref = (RMIInterface)UnicastRemoteObject.exportObject(serRef, 0);
    Registry reg = LocateRegistry.getRegistry();
    reg.bind("ServerObj", inref); -------->Exception in this line
} catch (AlreadyBoundException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
4

2 に答える 2

1

問題は、インターフェースへのアクセス方法にあると思います。

あなたが言ったように、Under the com folder I have all three files "RMIInterface, RMIServer,RMIClient".

同じパッケージ/フォルダにすべてのファイルがある場合、なぜあなたは書いているのですか?com.RMIInterface

それはRMIInterface、あなたが言ったようcomに、現在のcomパッケージで呼び出された別のパッケージを検索するからです。

あなたが私の主張を理解したことを願っています。

編集

RMIプログラムを実行している間、rmiregistryを実行する必要があります。

サーバープログラムを起動するrmiregistry 前に実行する必要があります。

コンソールまたはWindowsのCMDから実行してみてください。

rmiregistryまたはstart rmiregistryCMDで試してください。CMDから実行している間、実行している場所と同じフォルダー/パッケージからrmiregistryを開始する必要がありjavacますjava。日食の場合は、comフォルダーからrmiregistryを実行してみてください。

アップデート

今までは、comフォルダー内からrmiregistryを開始しようとしていると思います。comフォルダから開始してみてください。

にもかかわらず D:\Workspace\Study\bin\com>start rmiregistry

試す

D:\Workspace\Study\bin\start rmiregistry

于 2012-09-26T09:02:07.917 に答える
1
Remote Server Error:RemoteException occurred in server thread; nested exception is:
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
java.lang.ClassNotFoundException: mathInterface

次の手順を実行して解決するのは非常に簡単なエラーです。

  • たとえば、あなたのJavaファイルはDドライブを考慮してください
  • rmir​​egistry D ドライブを開始します (例: D:\start rmiregistry)。次に、他のドライブで rmiregistry を開始しないでください。上記のエラーが発生します。

(ファイルがどこにあっても、開始しますrmiregistry)

参照 : java.rmi.ServerException: サーバースレッドで RemoteException が発生しました (ClassNotFoundException)

于 2013-09-03T13:37:56.670 に答える