Bonjour,
ça fait 10 jours que je suis bloqué sur un problème d'RMI et j'ai rien trouvé sur le net:
je dois développer un factory qui crée des agents avec des coordonnées qui bougent arbitrairement.
la compilation est clean, mais l'exécution se bloque au moment d'enregistrement de l'agent dans le registre. même quand je désactive mon pare-feu

***************************************************************
la classe de l'agent distant:
***************************************************************

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
package fr.cnamp.agent;
import java.lang.Thread.*;
import java.util.*;
import java.rmi.*;
import java.rmi.Remote.*;
import java.rmi.server.*;
 
public class  AgentOD extends UnicastRemoteObject implements AgentODInt, Runnable
{
 
    int tailleGrille=20;                // initialisation de la taille du grille
    public Thread th =new Thread(this);
    public int x=10;public int y=10; 	// déclaration des coordonées
    int color;                          // déclaration du couleur de l'agent
    int port=9100;
 
    // j'ai mis la fonction moveit en type "char" car avec l'implementation du tread il n'a pas accépté le type "void"
    public char  moveit() throws RemoteException
    {
        try{
                Random l_rdm =new Random();
                int l_sensX = (int)(Math.abs(l_rdm.nextInt())%3) - 1;
                int l_sensY = (int)(Math.abs(l_rdm.nextInt())%3) - 1;
                x = x + l_sensX;
                y = y + l_sensY;
                if (x<0) x=tailleGrille-1;
                if (y<0) y=tailleGrille-1;
                if (x>tailleGrille-1) x=0;
                if (y>tailleGrille-1) y=0;
                try
                {                                       // pour attendre une seconde
                Thread.sleep(1000);			// avant de changer les valeur
                }					// de x et y.
                 catch (InterruptedException e)
                {
                        System.out.println(e.getMessage());
                }
        }
        catch (Exception e){System.out.println(e.getMessage());}
    //j'ai besoin d'un caractere comme retour, alors j'ai pris une lettre au hazard 'O'
   // il n'accepte pas la fonctionde type voide, et je ne sais pas pq???
    return 'O';
    }
    public void run()
    {
        try
        {
            while(true)  {moveit();}
        }
        catch(Exception e){e.getMessage();}
        finally {System.out.println("fin de run :   ");
        }
    }
    // pour envoyer les coordonné au factory s'il la demande
    public int getX(){return this.x;}
    public int getY(){return this.y;}
    public AgentOD(int new_x,int new_y,int reqcolor)throws RemoteException
    {
    x=new_x;y=new_y;	// mettre les coordonnées demandé par l'exterieur.
    color= reqcolor;
    }
 
}
*******************************************************************
la classe du factory:
***************************************************************

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
package fr.cnamp.factory;
import java.lang.Thread.*;
import java.rmi.Remote.*;
import java.rmi.server.*;
import fr.cnamp.agent.*;
import fr.cnamp.factory.*;
import java.rmi.registry.*;
import java.rmi.*;
 
public class FactoryJeuAgentOD extends UnicastRemoteObject implements FactoryJeuAgentODInt
{
    // Attributs de FactoryJeuAgentOD
    private String name;
    private int nb;
    private int color;
    private int port;
    private AgentOD[] listAgent; // tableau des agents
 
    //constructeur FactoryJeuAgentOD
    public FactoryJeuAgentOD(String reqname,int reqnb, int reqcolor, int reqport) throws Exception{
        name=reqname;
        nb=reqnb;
        color=reqcolor;
        port=reqport;
        listAgent=new AgentOD[reqnb+1];
 
        System.out.println("Execution de FactoryJeuAgentOD :");
        try
        {
            // création des agents dans le tableau.
            for (int i=1;i<=reqnb;i++)
            {
            System.out.println("Creation de l'Agent "+ i+"/"+reqnb);
            listAgent[i]=new AgentOD(10,10, reqcolor);
            System.out.println("Creation de l'Agent "+i+" termine ds factory");
 
            //enregistrement de l'agent dans le registry
            Naming.rebind("rmi://localhost:"+port+ "/"+"factory"+i ,this);
            }
 
            // pour faire bouger  les agents dans le factory et pas dans l'AgentOD
            moveAgent();
        }
        catch(Exception e){System.out.println(e.getMessage());}
        }
    // la fonction qui appellera le thread de deplacement de chaque agent.
        public void moveAgent()throws RemoteException{
            System.out.println("demarage de moveAgent() pour "+this.nb+" agents: ");
            for (int i=1; i<=this.nb;i++)
            {
                System.out.println("demarage du tread " + i);
                listAgent[i].th.start();
            }
        }
        // afficher les coordonnées en appellant les fonction getX() et getY() dans AgentOD
        public void printXY()throws RemoteException{
 
             try{
           //boucle d'affichage et de deplacement.
            System.out.print("\n");
            for (int i=1; i<=this.nb;i++){System.out.print("agent " + i+" \t");}System.out.println();
            System.out.println();
 
            while(true){
                for (int i=1; i<=nb;i++){
                    System.out.print(listAgent[i].x + " - " + listAgent[i].y+"\t\t"  );
                }
                try{					 // pour attendre une seconde
                    Thread.sleep(1000);			 // avant de charger les valeur
                }					 // de x et y, 
                 catch (InterruptedException e){
                    System.out.println(e.getMessage());
                }System.out.println();
            }
        }catch (Exception e){e.getMessage();}
 
        }
        public void creatFactory(String reqname,int rnb, int rcolor, int rport)throws RemoteException{
        try{
                 FactoryJeuAgentOD fact=new FactoryJeuAgentOD( reqname, rnb, rcolor, rport);
                 fact.printXY();
        }catch (Exception e){e.getMessage();}}
 
    public static void main(String argv[]) throws Exception
    {
        try
                        {
                                        // Creation de l'adptateur
                                        LocateRegistry.createRegistry(9101);
                        }
        catch(Exception e){
                        // si il existe deja alors inutile de le creer
        }
 
          try{
              FactoryJeuAgentOD fact=new FactoryJeuAgentOD( "bux",5,1,9103);
              fact.printXY();
        }catch (Exception e){e.getMessage();}
    }
}
j'ai cherché partout une solution pour ce problème mais j'ai pas trouvé, alors merci pour votre aide!!
PS: le stub et le skelton ç