2015-04-28 1 views
0

Когда я запускаю мое приложение RMI это работает, но когда я пытаюсь мой код на другой компьютер с различными адресами я получаю эту ошибку:реестра RMI не может найти класс заглушки

java.rmi.UnmarshalException: error unmarshalling return; nested exception is:

java.lang.ClassNotFoundException: zz.INTERFCE at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source) at java.rmi.Naming.lookup(Unknown Source) at CLIENT$2.actionPerformed(CLIENT.java:112) . . .

нормально это мой код : сторона сервера

      try { 
         System.setProperty("java.security.policy","C:\\DERNIER\\src\\security.policy"); 
     System.setSecurityManager(new RMISecurityManager()); 

        registre = LocateRegistry.createRegistry(Integer.parseInt(textport.getText())); 
        IMPLIEMENT obj=new IMPLIEMENT(); 
        registre.rebind("Hello1",obj); 
        list1.add("serveur is lisning"); 
        cpt++; 
       } catch (RemoteException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

сторона клиента

   try { 

        user=txtUN.getText(); 
        client=new CLIENT_IMPLMENT(rsa,user); 

        hello= (INTERFCE) Naming.lookup("rmi://"+textadressz.getText()+":"+Integer.parseInt(txtport.getText())+"/Hello1");   
        hello.connecté((CLIENT_INTERFCE)client,user,rsa.getN(),rsa.getE()); 
        cpt++; 

       } catch (RemoteException | MalformedURLException | NotBoundException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
       } 

PS: Мое приложение ш ork's fine in localhoste

+0

доли код плз. –

ответ

1

Вы неправильно указали проблему. Класс, который не найден, равен zz.INTERFCE. Это не заглушка. На самом деле это удаленный интерфейс. Он должен быть развернут на клиенте. В противном случае клиент все равно ничего не сможет с этим поделать.

+0

ZZ является Pakage, которые включают в себя интерфейс на стороне сервера, клиент был в состоянии чтобы добраться до пакинга, но он не смог дотянуться до заглушки, это все-таки моя gess? –

+0

Я не знаю, почему вы догадываетесь, когда я сказал вам ответ. «Достигнуть пакета» не имеет смысла Если «zz» является пакетом, который включает интерфейс на стороне сервера »означает, что вы дублировали интерфейс на два пакета, это проблема. Это должен быть тот же интерфейс, одно имя, один и тот же пакет, одно и то же определение Желательно, чтобы тот же файл .class. – EJP

+0

спасибо verry match мой друг, наконец, может быть применение работает благодарение за помощь –

0

кажется, что вы должны иметь одинаковое имя пакета на двух сторон (клиент и сервер.

+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). –

+0

@ErwinBolwidt На самом деле это так, хотя и неоднозначно выражено. – EJP

+0

ну, может быть. Как я вижу, он просто что-то говорит и не пытается решить проблему OP, поэтому это должен быть комментарий. И то, что она заявляет, не кажется (по крайней мере, не из вопроса OP) релевантным, поскольку нет никаких указаний на то, что имена пакетов различаются на клиенте и сервере. –