2014-01-10 3 views
-1

Я делаю повестку дня на сервере, и все идет хорошо, я запустил реестр RMI, и сервер работал нормально, я тестирую код, и я смог войти в систему. теперь я хочу начать вводить коды в методы и вызывать их в клиенте с сервера, а когда я помещаю Naming.rebind("server", i); на сервер, чтобы вызвать методы, код прерывается.Server breaks on Naming.rebind

Мой проект состоит из трех классов: сервера, клиента и интерфейса, который вызывает методы от сервера к клиенту. Это код сервера:

public class ServerAgendas extends UnicastRemoteObject 
    implements InterfaceServer { 


    private static final long serialVersionUID = 1L; 

    protected ServerAgendas() throws RemoteException { 
    super(); 
    // TODO Auto-generated constructor stub 
    } 

    static String Clientusername; 
    static String Clientpassword; 

    public static void main (String args[]) throws NotBoundException, 
     IOException { 
    System.out.println("1"); 

    try{ 
     InterfaceServer i = new ServerAgendas(); 
     System.out.println("2"); 
     Naming.rebind("server",i); 
     System.out.println("Serveur agendas pret"); 
    } 
    catch (Exception e){ 
     System.err.println("Error "+e.getMessage()); 
    } 

    ServerSocket ASocket = new ServerSocket(portNumber); 
    Socket connectionSocket = ASocket.accept(); 

    } 

    public boolean login(String ClientUsername, String ClientPassword) 
     throws IOException, SQLException { 
    } 

на стороне клиента я использую это для вызова методов:

InterfaceServer i = (InterfaceServer)Naming.lookup("server"); 

System.out.println(i.login(username, password)); 

и интерфейс содержат:

public interface InterfaceServer extends Remote{ 

    public boolean login(String Clientusername, String Clientpassword) 
     throws RemoteException, IOException, SQLException; 

бегает реестр сначала я запускаю сервер, консоль показывает:

1 
2 
Error RemoteException occurred in server thread; nested exception is: 
java.rmi.UnmarshalException: error unmarshalling arguments; nested exception is: 
java.lang.ClassNotFoundException: InterfaceServer 

я использовал 1 и 2, чтобы увидеть, где он ломает, он ломает на:

Naming.rebind("server",i); 

Что мне нужно сделать, чтобы избежать этого исключения, возникающую?

+0

Что? Как оправдана эта близкая причина? Может ли кто-нибудь указать, где находится простая опечатка? Почему проблема не может быть воспроизведена? –

+0

@ Duncan, может быть, вопрос _unclear_ к доводчикам, поэтому они догадались, что там была опечатка, или это так _broad_ какая-то опечатка просто должна быть там. –

+0

@ user3181052 Не ругайтесь в своих комментариях, они будут (и были) удалены. Я не ответил, потому что не знаю ответа. Сохраняя спокойствие и учитывая, что вы можете улучшить свой вопрос, это способ справиться с этой ситуацией. –

ответ

0

Класс, указанный в сообщении, недоступен в реестре на его CLASSPATH.

Простейшим решением этой и нескольких других проблем является запуск реестра внутри JVM сервера с помощью LocateRegistry.createRegistry().

В противном случае вам нужно будет выяснить, как запустить команду rmiregistry с аргументом CLASSPATH, или использовать функцию codebase, которая является еще одним чайником рыбы.

+1

@downvoter Пожалуйста, объясните – EJP