次の方法:
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に見つからないという理由がわかりません
この例外には3つのケースがあります。
エクスポートする場合:「rmic」を実行せず、Javadoc for UnicastRemoteObject
の前文に記載されている手順を実行して不要にしました。
バインド時:レジストリには、スタブやリモートインターフェイス、またはクラスパスに依存するものがありません。
見上げるとき:クライアントはクラスパスにこれらのものを持っていません。
これはケース2です。レジストリは指定されたクラスを見つけることができません。
4つの解決策があります:
関連するJARまたはディレクトリを含むCLASSPATHを使用してレジストリを開始します。
LocateRegistry.createRegistry().
を使用して、サーバーJVMでレジストリを起動します。
UnicastRemoteObject.
のJavadocの前文で説明されているように、動的スタブを使用します。ただし、リモートインターフェイス自体または依存するクラスで同じ問題が発生する可能性があります。その場合、上記の1〜3が引き続き適用されます。そのクラス/それらのクラスに。
コードベース機能を使用します。これは実際には展開オプションであり、IMOは開発の初期段階では避けるべきものです。
Remote Server Error:RemoteException occurred in server thread; nested exception is:
Java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
Java.lang.ClassNotFoundException: mathInterface
次の手順を実行することで解決するのが非常に簡単なエラー:
(ファイルがどこにあっても、rmiregistry
を開始します)
私はこれと同じ問題を抱えており、別の解決策が私のために働いた。私は2つの異なるIntelliJプロジェクトを実行しており、各プロジェクトにインターフェイスのコピーがありました。それらの1つはパッケージに入っていて、もう1つは入っていなかったため、このエラーが発生していました。
ソリューション: