web-dev-qa-db-ja.com

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

次の方法:

private void startServer() { // snippet that starts the server on the local machine
    try {
         RemoteMethodImpl impl = new RemoteMethodImpl();
         Naming.rebind( "Illusive-Server" , impl );
    }catch(Exception exc) {
        JOptionPane.showMessageDialog(this, "Problem starting the server", "Error", JOptionPane.ERROR_MESSAGE);
        System.out.println(exc);
    }
}

この例外をスローします:Java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: Java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: Java.lang.ClassNotFoundException: Interfaces.RemoteMethodIntf

プロジェクトを開始すると、JOptionPaneにサーバーの起動に問題があり、次に上記の例外が発生するというメッセージが表示されます。これの理由は何でしょうか。 ?

例外の最後のステートメントが、正しいパッケージをインポートしたときにクラスがexcに見つからないという理由がわかりません

9
Suhail Gupta

この例外には3つのケースがあります。

  1. エクスポートする場合:「rmic」を実行せず、Javadoc for UnicastRemoteObjectの前文に記載されている手順を実行して不要にしました。

  2. バインド時:レジストリには、スタブやリモートインターフェイス、またはクラスパスに依存するものがありません。

  3. 見上げるとき:クライアントはクラスパスにこれらのものを持っていません。

これはケース2です。レジストリは指定されたクラスを見つけることができません。

4つの解決策があります:

  1. 関連するJARまたはディレクトリを含むCLASSPATHを使用してレジストリを開始します。

  2. LocateRegistry.createRegistry().を使用して、サーバーJVMでレジストリを起動します。

  3. UnicastRemoteObject.のJavadocの前文で説明されているように、動的スタブを使用します。ただし、リモートインターフェイス自体または依存するクラスで同じ問題が発生する可能性があります。その場合、上記の1〜3が引き続き適用されます。そのクラス/それらのクラスに。

  4. コードベース機能を使用します。これは実際には展開オプションであり、IMOは開発の初期段階では避けるべきものです。

12
user207421
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を開始します)

4
MUNIRAJ

私はこれと同じ問題を抱えており、別の解決策が私のために働いた。私は2つの異なるIntelliJプロジェクトを実行しており、各プロジェクトにインターフェイスのコピーがありました。それらの1つはパッケージに入っていて、もう1つは入っていなかったため、このエラーが発生していました。

ソリューション:

  • インターフェイスのコピーがパッケージに含まれていないことを確認してください。
  • インターフェイスのコピーのパッケージ名がまったく同じであることを確認してください。
0
star8163264