bonjour,

Je souraite garder une trace des tout mes clients (RMI) pour pouvoir les notifiers avec certaines informations.

J'ai donc essayé de faire ceci:

Serveur:
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
public class Server extends UnicastRemoteObject implements LoginInterface, ModelInterface {
    private static Prog prog;
    private static ArrayList<Client> clientList;
    /**
     * Constructeur de la classe Server
     */
    public Server () throws RemoteException {
    }
 
    /**
     * méthode qui démarre le serveur
     */
 
    public static void main(String[] args) throws Exception {
        String serverName = "sServer";
        Server sServer = new Server();
        Server.clientList=new ArrayList();
        try{
            //le registre RMI est initialisé ici!
            java.rmi.registry.LocateRegistry.createRegistry(1099);
        } catch (Exception e) {
            System.out.println("Erreur: le programme n'a pas pu créer le registre");
        }
        //On lance le rebind avec le nom du serveur et l'objet serveur qu'on vient de créer
        Naming.rebind(serverName, sServer);
        //On affiche l'adresse IP du serveur
        System.out.println(serverName +" est en marche" + " l'adresse IP du serveur est: "+
                InetAddress.getLocalHost().toString());
        //Une instance de la classe prog, qui gère le jeu, est lancée
        prog = new Prog();
 
 
 
    }
 
    /**
     * Envoie l'objet Prog
     */
     public Prog getProg() throws RemoteException {
         return this.prog;
 
     }
 
    public void login(Client newClient) throws RemoteException {
        Server.clientList.add(newClient);
    }
 
 
}
le client:
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
public class Client extends UnicastRemoteObject implements Serializable {
    private static LoginInterface loginServ;
    private static ModelInterface modelServ;
 
    /**
     * Constructeur de la classe
     */
    public Client () throws RemoteException{
    }
    /**
     * Méthode qui démarre le / les clients
     */
    public static void main(String[] args) throws RemoteException {
        //ici on introduit l'adresse IP du serveur
        String hostname = "//127.0.1.1/sServer";
        if (args.length > 0) {
            hostname = "//" + args[0] + "/sServer";
        } else {
            System.out.println("Pas de hostname saisi, le client est lancé" +
                    " sur cette machine");
        }
       try{
           /**Le client effectue un lookup sur les deux interfaces du jeu,
            * pourintéragir avec le serveur
            */
 
           modelServ = (ModelInterface) Naming.lookup(hostname);
           loginServ = (LoginInterface) Naming.lookup(hostname);
           System.out.println("La connexion au serveur a été établie!");
 
       }
       catch(Exception e){
           System.out.println("Le serveur n'a pas été trouvé!");
       }
       finally{
           new GUI.MainMenuGUI(modelServ).setVisible(true);
// --- C EST ICI QUE CA PLANTE :-)
           loginServ.login(this);
       }
    }
et mon LoginInterface:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
public interface LoginInterface extends Remote {
    public void login(Client newClient) throws RemoteException;
}
Malheureusement j'ai une erreur dans le client qui me dis "non-static variable this cannot be referenced from a static context". Je comprend bien que mon client est un static mais je ne sais pas comment faire pour résoudre ce problème et avoir une liste de mes clients...

Merci