Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité régulier
    Profil pro Kevin Lecocq
    Inscrit en
    juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Nom : Kevin Lecocq

    Informations forums :
    Inscription : juillet 2010
    Messages : 18
    Points : 8
    Points
    8

    Par défaut [RMI] Boutons et Timer

    Bonjour,

    Je réalise une application qui permet de gérer un carrefour au travers d'une interface client / serveur en RMI.

    J'ai suivi les différents tutoriaux proposé par le site et vu dans le cadre de mes cours et l'application originale tourne finalement sur le client.

    J'ai cependant quelques bugs que je ne comprend pas, du à la "rmisation" de mon code.

    1) Le timer.

    J'ai une classe Carrefour, implémentant CarrefourModele. Dans celle-ci, j'ai un timer qui est lancé via CarrefourModele lors du lancement de l'application client. Hors lorsque je fais un modele.getTimer().start(), celui-ci ne bouge pas du tout. Une idée ?

    Voici les 3 classes, j'ai essayer de retirer ce qui n'était pas essentiel.

    Code :
    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
     
    public class Carrefour extends UnicastRemoteObject implements CarrefourModele {
     
        private ArrayList<CarrefourModeleVue> vues;
        private Etat etat;
        private Timer timerFeu;
        private Timer timerPieton;
        private ActionListener incrementeurVehicule;
        private ActionListener incrementeurPieton;
        private int chg;
        private int clignotant;
        private int estSimOeP;
     
        public Carrefour() throws FileNotFoundException, IOException {
            vues = new ArrayList<CarrefourModeleVue>();
            etat = new Etat();
     
            incrementeurVehicule = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent evt) {
                    try {
                        cycleVehicule();
                    } catch (RemoteException ex) {
                        Logger.getLogger(Carrefour.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            };
     
            incrementeurPieton = new ActionListener() {
                @Override
                public void actionPerformed(ActionEvent evt) {
                    try {
                        cyclePieton();
                    } catch (RemoteException ex) {
                        Logger.getLogger(Carrefour.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            };
            etat.setNs(CouleurFeu.OFF);
            etat.setOe(CouleurFeu.OFF);
            etat.setNsP(CouleurFeu.OFF);
            etat.setOeP(CouleurFeu.OFF);
     
            timerFeu = new Timer(1, incrementeurVehicule);
            timerPieton = new Timer(1, incrementeurPieton);
            chg = 0;
            estSimOeP = 0;
            timerFeu.setDelay(1000);
            timerPieton.setDelay(1000);
     
        }
     
        @Override
        public void cycleVehicule() throws RemoteException {
            ...
            fire();
        }
     
     
        public void cyclePieton() throws RemoteException {
     
    ...
     
      fire();
        }
        @Override
        public Timer getTimerFeu() {
            return timerFeu;
        }
     
        @Override
        public Timer getTimerPieton() {
            return timerPieton;
        }
     
     
    }
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    public interface CarrefourModele extends Remote {
     
        public Timer getTimerFeu() throws RemoteException;
     
        public Timer getTimerPieton() throws RemoteException;
     
          ...
    }
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
    public Principale() {
            initComponents();
            ConfigurationPanel configurationPanel1 = null;
            try {
                configurationPanel1 = new ConfigurationPanel();
                mod = RMIConnexion.getConnexion("carrefour");
                System.out.println(mod.getEtat().getNsOrange());
                configurationPanel1.setModele(mod);
                this.add(configurationPanel1);
                this.setLayout(new FlowLayout());
                mod.getTimerFeu().start();
                mod.getTimerPieton().start();    
                pack();
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Principale.class.getName()).log(Level.SEVERE, null, ex);
            } catch (IOException ex) {
                Logger.getLogger(Principale.class.getName()).log(Level.SEVERE, null, ex);
            }
        }
    2) Les boutons.

    Autre problème, ce sont mes boutons. Lorsque rien n'était rmiser, j'avais une classe qui permettait de changer les paramètres du feu via des sliders. Tout se synchronisait parfaitement : si j'augmentait via le slider le temps du orange, celui-ci augmentait la variable etatOrange directement. Or ici, aucun bouton ne répond.
    Plus précisement, lorsque je récupère mon modèle via le réseau, je peux lire les variables qu'il contenait. Par contre, si j'essaye de les changer, il ne les prend pas en compte. Une idée ?


    Voila, j'ai encore d'autres bugs via rmi, mais je pense que je vais m'arrêter là, la plupart d'entre eux étant lier au fait que comme dit précédemment, j'arrive à récupérer le modèle, mais que les changements fait sur celui-ci ne sont pas pris en compte ...

    Un grand merci à vous, ne fusque pour la lecture.

  2. #2
    Invité régulier
    Profil pro Kevin Lecocq
    Inscrit en
    juillet 2010
    Messages
    18
    Détails du profil
    Informations personnelles :
    Nom : Kevin Lecocq

    Informations forums :
    Inscription : juillet 2010
    Messages : 18
    Points : 8
    Points
    8

    Par défaut

    Après une petite semaine, j'ai trouvé la réponse, même si je pense que cela n’intéressera personne.

    La méthode est bancale, mais elle fonctionne. Il suffit de passer toutes les méthodes de Etat dans le modèle. On peut comme cela accéder directement aux méthodes.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •