RMI: ServerException, RemoteException, UnmarshalException, UnmarshalException - PullRequest
1 голос
/ 01 октября 2019

Я следовал этому руководству: https://docs.oracle.com/javase/6/docs/technotes/guides/rmi/hello/hello-world.html#5

Я скомпилировал их в командной строке и после этого запустил rmiregistry. Затем, после того, как я набрал:

    start java -classpath "." example.Server

, он не показывал «Сервер готов». Но он также не отображал никаких ошибок.

Когда я попробовал его в Eclipse, он показал это:

  Server exception: java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: example.Hello
    java.rmi.ServerException: RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: example.Hello

Hello.java

   package example;

   import java.rmi.Remote;
   import java.rmi.RemoteException;

   public interface Hello extends Remote
   {
        String sayHello() throws RemoteException;
   }

Server.java

    package example;

    import java.rmi.registry.Registry;
    import java.rmi.registry.LocateRegistry;
    import java.rmi.RemoteException;
    import java.rmi.server.UnicastRemoteObject;

     public class Server implements Hello
    {

           public Server() {}

           public String sayHello()
           {
           return "Hello, world!";
           }

public static void main(String args[]) {

    try {
        Server obj = new Server();
        Hello stub = (Hello) UnicastRemoteObject.exportObject(obj, 0);

        // Bind the remote object's stub in the registry
        Registry registry = LocateRegistry.getRegistry();
        registry.bind("Hello", stub);

        System.err.println("Server ready");
    } catch (Exception e) {
        System.err.println("Server exception: " + e.toString());
        e.printStackTrace();
    }
}

}

Client.java

   package example;

   import java.rmi.registry.LocateRegistry;
   import java.rmi.registry.Registry;

   public class Client 
   {

        private Client() {}

       public static void main(String[] args) 
       {

            String host = (args.length < 1) ? null : args[0];
            try {
                  Registry registry = LocateRegistry.getRegistry(host);
                  Hello stub = (Hello) registry.lookup("Hello");
                  String response = stub.sayHello();
                  System.out.println("response: " + response);
            } catch (Exception e) {
            System.err.println("Client exception: " + e.toString());
            e.printStackTrace();
            }
      }
   }

Есть ли какие-либо шаги, которые я пропустил? Что мне делать?

1 Ответ

0 голосов
/ 01 октября 2019

ClassNotFoundException: example.Hello - ваше приложение не находит этот класс. Добавьте этот класс в путь к классам, как к клиенту, так и к серверу.

Если вы запускаете свой клиент на другом компьютере, кроме Sserver, не забудьте скопировать ваш класс example.Hello вместе с вашим клиентом.

...