Java RMI、テーブルの並べ替えに使用するサンプルプログラムを開発しましたが、次の例外が発生しました。
Erreur RemoteException occurred in server thread; nested exception is:
Java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is:
Java.lang.ClassNotFoundException: ServicesTableau
これは私のサーバーのソースコードです:
public class Serveur {
public static void main(String args[]) {
try {
System.out.println("Server start ...");
ServicesTableauImpl od = new ServicesTableauImpl();
String url = "rmi://" + args[0] + "/ServicesTableauImpl";
System.out.println("Passe");
Naming.rebind(url, od);
System.out.println("Attente d'invocations de client / CTRL-C pour stopper");
} catch (Exception e) {
System.out.println("Erreur " + e.getMessage());
}
/*
catch(Java.net.MalformatedURLException e){
System.out.println("Mauvais nom de serveur");
System.exit(1);
}
catch(RemoteException e){
System.out.println("Pas de Rmiregistry");
System.exit(1);
}
*/
}
}
そのクラスは、RMIレジストリのCLASSPATHでは使用できません。これを修正する最も簡単な方法は、LocateRegistry.createRegistry().
を介して同じJVMでレジストリを起動することです。結果を静的フィールドに保存します。
これは、サーバーと同じディレクトリでrmiregistry
を実行しなかったために発生しました。
場合によっては、rmiクライアントのコード(インターフェイスとメイン)をデフォルトのパッケージに移動する必要があります。サーバー側で繰り返します。それはあなたの問題を解決することができます(rmiでのパッケージングの作業はそれほど明白ではありません)。