Je reçois cette erreur:Java RMI question Proxy
java.lang.ClassCastException: $Proxy0 cannot be cast to rmi.engine.Call
at Main.main(Main.java:39)
Mon Abstract
et Call
classe à la fois étendre Remote
.
Appel:
public class Call extends UnicastRemoteObject implements rmi.engine.Abstract {
public Call() throws Exception {
super(Store.PORT, new RClient(), new RServer());
}
public String getHello() {
System.out.println("CONN");
return "HEY";
}
}
Résumé:
public interface Abstract extends Remote {
String getHello() throws RemoteException;
}
Ceci est mon principal:
public static void main(String[] args) {
if (args.length == 0) {
try {
System.out.println("We are slave ");
InetAddress ip = InetAddress.getLocalHost();
Registry rr = LocateRegistry.
getRegistry(ip.getHostAddress(), Store.PORT, new RClient());
Object ss = rr.lookup("FILLER");
System.out.println(ss.getClass().getCanonicalName());
System.out.println(((Call)ss).getHello());
} catch (Exception e) {
e.printStackTrace();
}
} else {
if (args[0].equals("master")) {
// Start Master
try {
RMIServer.start();
} catch (Exception e) {
e.printStackTrace();
}
}
Netbeans dit que le problème est sur la ligne 39, qui est
System.out.println(((Call)ss).getHello());
La sortie ressemble à ceci:
Run:
We are slave
Connecting 10.0.0.212:5225
$Proxy0
java.lang.ClassCastException: $Proxy0 cannot be cast to rmi.engine.Call
at Main.main(Main.java:39)
BUILD SUCCESSFUL (total time: 1 second)
Je courais un maître cmd écoute sur le port 5225.
Vraiment utile pour moi. Comme je l'ai également créé objet de l'implémentation du serveur au lieu de l'interface. Vous devez garder à l'esprit que lorsque vous appelez des programmes serveur, c'est-à-dire des méthodes à distance, vous devez les appeler par interface définie. –