Java.RMI.ServerException: サーバー スレッドで RemoteException が発生しました (クラスが見つからない例外)
コードを使用してサーバーを起動しようとしたときスニペットが提供されている場合、「java.rmi.ServerException: RemoteException がサーバー スレッドで発生しました。ネストされた例外」という例外が発生する可能性があります。 : java.rmi.UnmarshalException: 引数のアンマーシャリングエラー; ネストされた例外: java.lang.ClassNotFoundException: Interfaces.RemoteMethodIntf."
この例外は、サーバー上で必要なクラスの検索に問題がある場合にスローされます。この例外が発生する可能性のあるシナリオは 4 つあります:
-
エクスポート: 「rmic」を実行しないか、UnicastRemoteObject プリアンブルで必要な手順をスキップすると、この例外が発生する可能性があります。
-
バインディング: レジストリにリモートのスタブが不足している可能性がありますインターフェイス、またはそのクラスパスへの依存関係。
-
検索: クライアントのクラスパスに必要なクラスがない可能性があります。
-
リモート メソッドの呼び出し: サーバーの CLASSPATH にクラスが存在しないオブジェクトを送信したり、クライアントの CLASSPATH にクラスが存在しなかったオブジェクトを受信したりすると、どちらもこの問題の原因となります。
この場合、レジストリが指定されたクラスを見つけることができないシナリオ 2 です。考えられる解決策は次のとおりです。
-
JAR を含む CLASSPATH を使用します。 必要な JAR またはディレクトリを含む CLASSPATH でレジストリを開始します。
-
サーバー JVM にレジストリを作成します: Employ LocateRegistry.createRegistry() を使用して、サーバー JVM でレジストリを開始します。
-
動的スタブの使用: UnicastRemoteObject Javadoc の説明に従って動的スタブを使用します。この手法により、リモート インターフェイスまたは依存関係に関する潜在的な互換性の問題が相殺されます。
-
回避シナリオ (4): サーバーとの間で送信されるオブジェクトのいずれかの CLASSPATH に欠落しているクラスがないことを確認します。
以上がJava RMI サーバーで「java.rmi.ServerException: RemoteException」が発生するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。