2012-12-28 10 views
7

Ich brauche Ihre Hilfe rund um JAVA RMI, ich entwickelte ein Beispielprogramm zum Sortieren der Tabelle. aber ich habe diese Ausnahme:java.rmi.UnmarshalException: Fehler beim Abstellen von Argumenten; verschachtelte Ausnahme ist: java.lang.ClassNotFoundException: ServicesTableau

Erreur RemoteException occurred in server thread; nested exception is: 
    java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
    java.lang.ClassNotFoundException: ServicesTableau 

und dies ist mein Server-Quellcode:

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); 
    } 
    */ 
    } 
} 
+1

Ist diese Klasse ServicesTableauImpl im Klassenpfad verfügbar? –

Antwort

10

Diese Klasse ist auf dem CLASSPATH des RMI Registry nicht zur Verfügung. Der einfachste Weg, dies zu beheben, besteht darin, die Registry in derselben JVM zu starten, über LocateRegistry.createRegistry().. Speichern Sie das Ergebnis in einem statischen Feld.

+0

Ich arbeite unter Linux, danke für deine Antwort (ich habe rmiregistry verwendet, es funktioniert jetzt gut) – MDIT

+0

Linux macht keinen Unterschied zu der Antwort. – EJP

-2

Dieser Fehler liegt daran, dass der Sicherheitsmanagercode nicht geschrieben wurde, weshalb die Klasse nicht geladen werden kann. So stellen Sie sicher, dass Sie Code für den Sicherheitsmanager hinzufügen.  
Wenn der Compiler den Sicherheitsmanager nicht findet, erstellen Sie einen neuen. Fügen Sie den Code in der main-Methode hinzu.

+0

Nein, ist es nicht. Dies liegt daran, dass die Klasse nicht gefunden wurde. Sie müssen die gesamte Ausnahme lesen. Es wäre nur aufgrund des Fehlens eines Sicherheitsmanagers, wenn er die RMI-Codebasis-Funktion verwendet, die nicht angegeben ist. – EJP

0

In einigen Fällen müssen Sie Ihre RMI-Client-Code (Schnittstelle und Haupt) auf Standard-Paket verschieben. Wiederholen Sie es für die Serverseite. Es kann Sie Problem lösen (Arbeit mit Verpackung in Rmi ist nicht so offensichtlich).