Auf Thema antworten

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:


[code=Java]package example;


import java.rmi.Remote;

import java.rmi.RemoteException;



public interface PongInterface {

   

    void pong(String message, String sender);


}

[/code]




[code=Java]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);

       

       

    }

}[/code]


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?



Oben