Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/01/2013, 11h33   #1
weautus
Invité régulier
 
Kevin Lecocq
Inscription : 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.
weautus est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2013, 15h40   #2
weautus
Invité régulier
 
Kevin Lecocq
Inscription : juillet 2010
Messages : 18
Détails du profil
Informations personnelles :
Nom : Kevin Lecocq

Informations forums :
Inscription : juillet 2010
Messages : 18
Points : 8
Points : 8
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.
weautus est déconnecté   Envoyer un message privé Réponse avec citation 10
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h39.


 
 
 
 
Partenaires

Hébergement Web