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 : 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 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 : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public interface CarrefourModele extends Remote { public Timer getTimerFeu() throws RemoteException; public Timer getTimerPieton() throws RemoteException; ... }2) Les boutons.
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 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); } }
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.
Partager