Salve ragazzi sto implementando una chat, ho due progetti(su eclipse) un progetto per l'implementazione del server e un progetto per l'implementazione del client, ho però un problema sull'implementazione l'ide mi da un errore durante la compilazione del client.
Questo è il messaggio di errore che mi caccia eclipse
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: serverImplementation_Stub
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at ClientClass.main(ClientClass.java:63)
Caused by: java.lang.ClassNotFoundException: serverImplementation_Stub
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.rmi.server.LoaderHandler$Loader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at sun.rmi.server.LoaderHandler.loadClassForName(Unknown Source)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at sun.rmi.server.LoaderHandler.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader$2.loadClass(Unknown Source)
at java.rmi.server.RMIClassLoader.loadClass(Unknown Source)
at sun.rmi.server.MarshalInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
... 3 more
vi linko il codice del server e il codice del client
server:
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
import java.util.logging.Logger;
public class serverImplementation extends UnicastRemoteObject implements IChat {
ArrayList<ClientInterface> uomini;
ArrayList<ClientInterface> donne;
protected serverImplementation() throws RemoteException {
super();
uomini= new ArrayList<ClientInterface>();
donne= new ArrayList<ClientInterface>();
}
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void registrati(ClientInterface utente)
throws RemoteException {
if(utente.getSesso().equalsIgnoreCase("uomini")){
uomini.add(utente);
cercaCompagno(utente, "donne");
}
else if(utente.getSesso().equalsIgnoreCase("donne")){
donne.add(utente);
cercaCompagno(utente, "uomini");
}
}
@Override
public void esci(ClientInterface utente,String sesso) throws RemoteException {
if(sesso.equalsIgnoreCase("uomini"))
uomini.remove(utente);
else
donne.remove(utente);
}
@Override
public void cercaCompagno(ClientInterface utente,String sesso) throws RemoteException {
if(sesso.equalsIgnoreCase("uomini")){
for(int i=0;i<donne.size();i++){
if(donne.get(i).getImpegnato()==false){
utente.messaggia(utente,donne.get(i),"inizio conversazione\n");
i=donne.size();
donne.get(i).setImpegnato(true);
}//chiusura dell'if
}//chiusura del for
}//chiusura dell'if esterno
else{
for(int i=0;i<uomini.size();i++){
if(uomini.get(i).getImpegnato()==false){
utente.messaggia(utente,uomini.get(i),"inizio conversazione\n");
uomini.get(i);
uomini.get(i).setImpegnato(true);
i=uomini.size();
}//chiusura dell'if
}
}
}
public static void main(String[] args) {
Logger logger= Logger.getGlobal();
System.setSecurityManager(new SecurityManager());
serverImplementation server;
try {
server = new serverImplementation();
Naming.rebind("cuoriSolitari",server);
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
client:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.Scanner;
public class ClientClass extends UnicastRemoteObject implements ClientInterface{
private String nick;
private boolean impegnato;
private String sesso;
protected ClientClass(String nick,String sesso) throws RemoteException {
super();
impegnato=false;
this.nick=nick;
this.sesso=sesso;
}
/**
*
*/
private static final long serialVersionUID = 1L;
@Override
public void setImpegnato(boolean stato) {
impegnato=stato;
}
@Override
public boolean getImpegnato() {
// TODO Auto-generated method stub
return impegnato;
}
@Override
public void messaggia(ClientInterface utente, ClientInterface utente2,String messaggia)
throws RemoteException {
while(!messaggia.equals("!QUIT")){
System.out.println(messaggia);
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
System.out.println(">> "+getNick());
utente2.messaggia(utente, utente2, messaggia);
}
}
@Override
public String getNick() throws RemoteException {
// TODO Auto-generated method stub
return nick;
}
@Override
public String getSesso() throws RemoteException {
// TODO Auto-generated method stub
return null;
}
public static void main(String[] args) {
System.setSecurityManager(new SecurityManager());
try {
IChat server =(IChat) Naming.lookup("cuoriSolitari");
String nickName;
String sesso;
Scanner in = new Scanner(System.in);
System.out.println("inserisci il nick");
nickName=in.nextLine();
System.out.println("inserisci il sesso");
sesso=in.nextLine();
server.registrati(new ClientClass(nickName, sesso));
} catch (MalformedURLException | RemoteException | NotBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
l'errore nello specifico mi viene generato nel momento che nel client provo ad eseguire questa istruzione:
IChat server =(IChat) Naming.lookup("cuoriSolitari"); // IChat è l'interfaccia del server