3

したがって、問題は、クライアントがrmiregistryを使用して関数を呼び出せるようにするサーバーコードがあることです。OS Xターミナルでこれらのコマンドを実行していて、作業している2つのフォルダーがあることに注意してください。

RMI- rmiregistry を呼び出し、 Server- すべてのサーバー コードを含む

したがって、1 つのターミナルを開き、次のように入力します。

rmiregistry -J-Djava.rmi.server.codebase=file:/Desktop/RMI/Server/ &

すべて順調です。ポートが戻ってきました。次に、サーバー コードを含む Server フォルダーにログインして、calculatorserverプログラムを実行します。ここで、コードベースとセキュリティ ポリシーを指定するように指示されました。

java -Djava.rmi.server.codebase=file:/Desktop/RMI/Server/ -Djava.security.policy=server.policy calculatorserver 

ただし、この同じエラーが引き続き発生します。

Server Error: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: calculator

このエラーが発生する唯一の理由は、rmiregistry がサーバー オブジェクトを見つけられないためだとわかっています。

いくつかのガイダンスをいただければ幸いです

4

1 に答える 1

0

これは実際の HTTP URL ではありません。http:を先頭に付けたディレクトリ名です。http:実際の HTTP サーバーで実際の URL を使用する必要があります。またはFTP。

URLを使用することはできますfile:が、多かれ少なかれ 1 つのホスト内にとどまることになります。その場合、コードベース機能は実際にはまったく必要ありません。また、URL を使用する場合はfile:、レジストリとクライアントが理解できる必要があります。これは、それらがすべて同じホストにあるか、レジストリとクライアントが見ることができる共有ディレクトリを指定することを意味します。

注: コードベースをレジストリ (または、リモート (コールバック) オブジェクトをエクスポートしない限り、クライアント) に指定しないでください: サーバー JVM にのみ指定してください。

于 2015-10-08T22:44:40.973 に答える