Почему я не нашел подходящего метода для ошибки exportObject? - PullRequest
0 голосов
/ 24 февраля 2012

Я получаю следующую ошибку:

no suitable method found for exportObject(exame2010.pkg2011.perfect,int)

в этой строке RMIServer:

perfectInterface stub = (perfectInterface) UnicastRemoteObject.exportObject(obj, 0);

соответствующий код выглядит следующим образом:


public class RMIServer
{
    public static void main(String[] args)
    {
        try
        {
            perfect obj = new perfect();
            perfectInterface stub = (perfectInterface) UnicastRemoteObject
                    .exportObject(obj, 0);
            Registry registry = LocateRegistry.createRegistry(10000);
            registry.bind("RemoteClass", stub);
            System.out.println("Server start");
        }
        catch (Exception ex)
        {
        }
    }
}

public class RMIClient
{
    public static void main(String[] args)
    {
        try
        {
            Registry registry = LocateRegistry.getRegistry("localhost", 10000);
            perfectInterface stub = (perfectInterface) registry
                    .lookup("RemoteClass");
            System.out.println("MENSAGEM " + stub.getperfect());
        }
        catch (Exception ex)
        {
        }
    }
}

public interface perfectInterface extends Remote
{
    public List<Integer> getperfect() throws RemoteException;
}

public class perfect extends Thread implements Serializable
{
    public List<Integer> getperfect() throws RemoteException
    {
        return Exame20102011.calcula();
    }
}

public class Exame20102011 extends Thread implements Serializable
{
    List<Integer> perfect = new ArrayList<Integer>();
    int ini = 0;
    int fim;
    int sum;

    public Exame20102011(int ini, int fim)
    {
        this.ini = ini;
        this.fim = fim;
    }

    public void run()
    {
        for (int number = ini; number < fim; number++)
        {
            sum = 0;
            for (int J = 1; J < number; J++)
            {
                if (number % J == 0)
                {
                    sum += J;
                }
            }
            if (sum == number)
            {
                perfect.add(number);
            }
        }
    }

    public static List<Integer> calcula()
    {
        Scanner LIMIT = new Scanner(System.in);
        String Limit = LIMIT.nextLine();

        int dim = Integer.parseInt(Limit) / 8;

        Exame20102011[] calculaPerfeitos = new Exame20102011[8];

        for (int i = 0; i < calculaPerfeitos.length; i++)
        {
            calculaPerfeitos[i] = new Exame20102011(i * dim, (i + 1) * dim);
        }

        for (int i = 0; i < calculaPerfeitos.length; i++)
        {
            calculaPerfeitos[i].start();
        }

        for (int i = 0; i < calculaPerfeitos.length; i++)
        {
            try
            {
                calculaPerfeitos[i].join();
            }
            catch (InterruptedException ex)
            {
                Logger.getLogger(Exame20102011.class.getName()).log(
                        Level.SEVERE, null, ex);
            }
        }

        List<Integer> perfect = new ArrayList<Integer>();
        for (int i = 0; i < 8; i++)
        {
            for (int j = 0; j < calculaPerfeitos[i].perfect.size(); j++)
            {
                perfect.add(calculaPerfeitos[i].perfect.get(j));
            }
        }
        return perfect;
    }

    public static void main(String[] args)
    {
        List<Integer> perfect = new ArrayList<Integer>();
        perfect = calcula();
        for (int i = 0; i < perfect.size(); i++)
        {
            System.out.println("Numero perfeitos calculados = "
                    + perfect.get(i));
        }
    }
}

В чем проблема?

1 Ответ

2 голосов
/ 24 февраля 2012

Сообщение об ошибке означает, что класс UnicastRemoteObject не имеет статического метода exportObject(perfect,int).Это потому, что класс perfect не реализует perfectInterface, поэтому он не реализует Remote.

...