java.rmi.ServerException: RemoteException ist im Server-Thread aufgetreten (ClassNotFoundException)

Die folgende Methode:

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 diese Ausnahme aus: 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 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

Wenn ich mein Projekt starte, werde ich mit der Nachricht in JOptionPane begrüßt, die besagt, dass das Starten des Servers und dann die obige Ausnahme problematisch ist. Was könnte der Grund dafür sein?

Ich verstehe nicht, warum die letzte Aussage der Ausnahme besagt, dass class nicht exc gefunden wird, wenn ich die richtigen Pakete importiert habe

   

    Es gibt drei Fälle dieser Ausnahme.

    1. Beim Exportieren: Sie haben ‘rmic’ nicht ausgeführt, und Sie haben die in der UnicastRemoteObject zum Javadoc für UnicastRemoteObject beschriebenen Schritte nicht UnicastRemoteObject , um es unnötig zu machen.

    2. Beim Binden: Die Registry hat nicht den Stub oder die Remote-Schnittstelle oder etwas, von dem sie abhängig sind von ihrem classnpfad.

    3. Beim Nachschlagen: Der Client hat diese Dinge nicht auf seinem classnpfad.

    Das ist Fall 2. Die Registrierung kann die benannte class nicht finden.

    Es gibt vier Lösungen:

    1. Starten Sie die Registrierung mit einem CLASSPATH, der die relevanten JARs oder Verzeichnisse enthält.

    2. Starten Sie die Registrierung in Ihrer Server-JVM über LocateRegistry.createRegistry().

    3. Verwenden Sie dynamische Stubs, wie in der UnicastRemoteObject. zum Javadoc von UnicastRemoteObject. Sie können jedoch immer noch auf dasselbe Problem mit der Remote-Schnittstelle selbst oder einer class stoßen, von der sie abhängig ist. In diesem Fall gelten 1-3 oben immer noch für diese class / diese classn.

    4. Verwenden Sie die Codebasis-function. Dies ist wirklich eine Bereitstellungsoption und IMO etwas, das in der anfänglichen Entwicklungsphase vermieden werden sollte.

     Remote Server Error:RemoteException occurred in server thread; nested exception is: java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: java.lang.ClassNotFoundException: mathInterface 

    Der Fehler ist sehr einfach zu lösen, um folgende Schritte auszuführen:

    • Zum Beispiel betrachten Ihre Java-Datei D-Laufwerk
    • Starten Sie rmiregistry D drive (Beispiel D: \ start rmiregistry) Starten Sie dann rmiregistry nicht auf den anderen Laufwerken, es wird den obigen Fehler ergeben

    (Wo auch immer deine Datei ist, rmiregistry )

    Sie können rmiregistry von überall starten, aber Sie müssen sicherstellen, dass sich die kompilierten classn bereits in Ihrem classnpfad befinden. Beispielsweise:-

     E:\ARMSRemoteUpdater\WebContent\WEB-INF\classes>set classpath=%classpath%;E:\ARMSRemoteUpdater\WebContent\WEB-INF\classes  E:\ARMSRemoteUpdater\WebContent\WEB-INF\classes>c:  C:\>rmiregistry 

    Und das obige sollte gut funktionieren.

    Wenn Sie rmiregistry vom Stammverzeichnis der kompilierten classn starten (im obigen Beispiel ist es E: \ ARMSRemoteUpdater \ WebContent \ WEB-INF \ classes), funktioniert das, weil. (Punkt – aktuelles Verzeichnis) ist bereits in Ihrem classnpfad festgelegt.

    Aber sobald du es entfernst. (dot – current directory) von Ihrem classnpfad, schlägt die obige Arbeitsbedingung ebenfalls fehl.

    Hoffe, ich habe es im Detail erklärt.