# Cast Exception bei einfachem RMI Beispiel



## auxilium (30. Nov 2012)

Hallo zusammen,

Versuche mich gerade an meiner ersten RMI-Anwendung, bekomme allerdings eine Fehlermeldung.
Es soll ein einfaches Pong werden, bei dem ich eine Nachricht an ein anderes Objekt aus einer anderen VM geben möchte.

Mein Interface:


```
package example;

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


public interface PongInterface {
	
	void pong(String message, String sender);

}
```




```
package example;
import java.rmi.*;
import java.rmi.registry.*;
import java.rmi.server.*;
import java.net.*;

 
public class RMIServer extends java.rmi.server.UnicastRemoteObject
implements PongInterface
{
    int      thisPort;
    String   name;
    Registry registry;    // rmi registry for lookup the remote objects.
 
  
 
    public RMIServer() throws RemoteException
    {	name = "Pongmaster";
    	thisPort=3232;
       
        try{
        registry = LocateRegistry.getRegistry(thisPort);
        int pongfreunde = registry.list().length;
        pongfreunde++;
        name += pongfreunde;
        
        registry.rebind(name, this);
            System.out.println(name+" is also online");
        }
        catch(RemoteException e){
        	 try {
				registry = LocateRegistry.createRegistry( thisPort );
			    registry.rebind(name, this);
				 System.out.println("Pongmaster is online");
			} catch (Exception e1) {
				e1.printStackTrace();
			}
        }
    }
   
    static public void main(String args[])
    {
        try{
        RMIServer s=new RMIServer();
        String[] pongfreunde = s.registry.list();
        if(pongfreunde.length>1){
        PongInterface pongfriend = (PongInterface) s.registry.lookup("Pongmaster");
        pongfriend.pong("Ping", s.name);
    }}
    catch (Exception e) {
           e.printStackTrace();
           System.exit(1);
    }
     }

	@Override
	public void pong(String message, String sender) {
		System.out.println("Thanks "+sender +"for "+message);
		
		
	}
}
```

Programm versucht eine Registry zu finden und das Objekt dann dort zu registrieren.
Wenn es keine findet, wird eine neue gestartet und das Objekt dann dort registriert.
Wenn dann 2 Objekte in der Registry sind, soll das letzte Objekt die Funktion vom Objekt pongmaster aufrufen.
Allerdings bekomme ich beim casten dann die Meldung:
java.lang.ClassCastException: $Proxy0 cannot be cast to example.PongInterface

Alle Klassen sind im selben Package und im selben Projekt.

Kann mir das nicht ganz erklären.

Jemand da eine Ahnung?


----------



## BuckRogers (30. Nov 2012)

probier mal:


```
public interface PongInterface extends Remote{
     void pong(String message, String sender) throws RemoteException;
 
}
```

Bitte um Rückmeldung ob das PRoblem gelöst ist oder nicht


----------



## auxilium (1. Dez 2012)

:-D  genau das war der Fehler.
Habe beim Verändern des Interfaces vergessen von Remote zu erben und die Exception zu berücksichtigen.
Danke!


----------



## BuckRogers (1. Dez 2012)

Hatte vor kurzem das gleiche Problem.

Bekomm ich noch ein "Danke" auf meinen Beitrag?  

Happy coding


----------

