Voilà, il s'agit d'un système de commande de pompe. Pour pouvoir utiliser les pompes, je doit prendre la main sur le système en cliquant sur le bouton PriseEnMain. Pour libérer la main sur le système, je reclique une deuxième fois sur le bouton.Le problème, c'est que le bouton ne marche qu'une fois et il refuse de libérer la main, voici le code :

EtatPriseDistance.java

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
101
102
103
104
105
106
107
108
 
import java.beans.*;
import javax.swing.*;
 
import com.schneiderautomation.factorycast.*;
import com.schneiderautomation.factorycast.comm.StatusMessages;
 
public class EtatPriseDistance implements PropertyChangeListener
{
	//Déclaration des variables
	short qty=1;
	boolean Clic;
	boolean[] valeur4=new boolean[1];
	JLabel EtatPrise=new JLabel();
 
	//on crée le bouton de prise en main pour pouvoir les modifier  en fonction de l'état de la prise en main
	JButton BoutonPriseMain=new JButton();
 
 
	public void init(CommBean comm)
	{
		try
		{
			//Création d'un objet qui permet de lire les variables de manière continuelle
			MonitorBool monitor4=new MonitorBool(comm.getAdaptor());
 
			//Création d'un objet qui permet de lire les variables lors de l'initialisation
			GetBool getter4=new GetBool(comm.getServer());
 
			//Initialisatiion du groupe de variable pour l'objet getter
			getter4.setAddress("%M27");
			getter4.setQuantity(qty);
			getter4.readValues();
 
			//On récupère les valeur pour l'objet getter
			valeur4=getter4.getValues();
 
			//On édite les labels
			setJLabel();
 
			//Mise en écoute des évènements des variables
			monitor4.addPropertyChangeListener(this);
 
			//Initialisation du groupe de variables
			monitor4.setAddress("%M27");
			monitor4.setQuantity(qty);
			monitor4.register();
		}
		catch(Exception e)
		{
			System.out.println("Erreur : "+e.getMessage());
		}
	}
 
	public void propertyChange(PropertyChangeEvent evt)
	{
		//Renvoi le nom de la propriété qui a été changé
		String prop4=evt.getPropertyName();
 
		if (prop4.equals("values"))
		{
			//On récupère les nouvelles valeurs
			valeur4=(boolean[])evt.getNewValue();
 
			//On édite les labels
			setJLabel();
		}
	}
 
	public void setJLabel()
	{
		//Si le système est pris en main et que l'utilisateur n'a pas cliqué sur le bouton de prise en main alors le système est déjà pris en main par quelqu'un d'autre...
		if((Clic==false)&&(valeur4[0]==true))
		{
			EtatPrise.setText("<html><font color=#CC0000 size=6>Un utilisateur a d&eacute;j&agrave; pris la main</font></html>");
			BoutonPriseMain.setText("<html>Prise en main<br>indisponible</html>");
			BoutonPriseMain.setEnabled(false);
		}
		else
		{
			BoutonPriseMain.setEnabled(true);
			//...sinon si le système est pris en main et que l'utilisateur a cliqué sur le bouton alors l'utilisateur a pris la main sinon personne n'a pris la main sur le système
			if(valeur4[0]==true)
			{
				EtatPrise.setText("<html><font size=6 color=#228B22>Syst&egrave;me pris en main</font></html>");
				BoutonPriseMain.setText("<html>D&eacute;sactiver<br>Prise en main</html>");
 
			}
			else
			{
				EtatPrise.setText("<html><font color=#CC0000 size=6>Syst&egrave;me non pris en main</font></html>");
				BoutonPriseMain.setText("<html>Activer<br>Prise en main</html>");
			}
		}
	}
 
	public boolean getValeur()
	{
		boolean val=valeur4[0];
		return val;
	}
 
	public void setValClic(boolean val)
	{
		Clic=val;
	}
 
}
PriseDistance.java :
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
 
 
import java.awt.event.*;
import javax.swing.*;
 
import com.schneiderautomation.factorycast.*;
import com.schneiderautomation.factorycast.comm.StatusMessages;
 
public class PriseDistance implements ActionListener
{
	SetBool setter1;
	boolean[] set=new boolean[1];
	ComPompe commandepompe;
	EtatPriseDistance etatprisedist=new EtatPriseDistance();
	boolean clic=false;
 
	public void init(CommBean comm)
	{
		etatprisedist.setValClic(clic);
 
		etatprisedist.init(comm);
		//Création d'un objet permettant d'écrire une valeur de variable
		setter1=new SetBool(comm.getServer());
 
		//Permet de spécifier que la commande que le bouton génère sera pris en compte par l'applet
		etatprisedist.BoutonPriseMain.addActionListener(this);
 
	}
 
	//méthode lancé lors d'un clic sur l'un des bouton
	public void actionPerformed(ActionEvent evt)
	{
		//Le clic est à true si on a pris la main sur le système
		if(clic==false)
			clic=true;
		else
			clic=false;
 
		setter1.setAddress("%M27");
 
		if((etatprisedist.getValeur()==false))
		{
			setter1.setValue(true);
		}
		else
		{
			setter1.setValue(false);
			commandepompe.DesactivPomp();
		}
 
		//on envoi la valeur
		try
		{
			setter1.sendValues();
		}
		catch(Exception e)
		{
			System.out.println("Erreur :"+e.getMessage());
		}
 
		etatprisedist.setValClic(clic);
	}
 
	//Cette méthode est utilisé lors de la destruction de l'applet
	public void destruction()
	{
		commandepompe.DesactivPomp();
		setter1.setValue(false);
 
		try
		{
			setter1.sendValues();
		}
		catch(Exception e)
		{
			System.out.println("Erreur :"+e.getMessage());
		}
	}
 
 
}
hydraulique.java :

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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
 
import javax.swing.*;
import java.awt.*;
import java.util.*;
 
import com.schneiderautomation.factorycast.*;
import com.schneiderautomation.factorycast.comm.StatusMessages;
 
public class hydraulique extends JApplet
{
 
	//Création d'un objet permettant la communication avec l'automate
	CommBean comm=new CommBean(Locale.getDefault());
 
	//Création des objets des autres classes
	ComPompe commandepompe=new ComPompe();
	PriseDistance priseDist=new PriseDistance();
 
 
	//Création du panneau et des labels titres
	JPanel panneau=new JPanel();
	JLabel titre1=new JLabel("<html><u>Pompe 1:</u></html>");
	JLabel titre2=new JLabel("<html><u>Pompe 2:</u></html>");
	JLabel titre3=new JLabel("<html><u>Pompe 3:</u></html>");
 
	public void init()
	{
		try
		{
			String IPServeur=getCodeBase().getHost();
			comm.connect(IPServeur,false);
			comm.start();
 
			commandepompe.init(comm);
			priseDist.init(comm);
 
			//insertion du panneau dans l'applet et création d'un objet GridBagConstraints pour le positionnement des éléments
			this.add(panneau);
			panneau.setBackground(Color.WHITE);
			panneau.setLayout( new GridBagLayout());
			GridBagConstraints contraintes = new GridBagConstraints();
 
			//insertion des labels titre
			contraintes.gridx=0;
			contraintes.gridy=0;
			contraintes.insets=new Insets(0,0,0,0);
			panneau.add(titre1,contraintes);
 
			contraintes.gridx=1;
			contraintes.gridy=0;
			contraintes.insets=new Insets(0,40,0,0);
			panneau.add(titre2,contraintes);
 
			contraintes.gridx=2;
			contraintes.gridy=0;
			contraintes.insets=new Insets(0,40,0,0);
			panneau.add(titre3,contraintes);
 
			//insertion des images représentant l'état des pompes
			contraintes.gridx=0;
			contraintes.gridy=1;
			contraintes.insets=new Insets(40,0,0,0);
			panneau.add(commandepompe.pompe.PompeActive[0],contraintes);
 
			contraintes.gridx=0;
			contraintes.gridy=1;
			contraintes.insets=new Insets(40,0,0,0);
			panneau.add(commandepompe.pompe.PompeInactive[0],contraintes);
 
			contraintes.gridx=1;
			contraintes.gridy=1;
			contraintes.insets=new Insets(40,40,0,0);
			panneau.add(commandepompe.pompe.PompeActive[1],contraintes);
 
			contraintes.gridx=1;
			contraintes.gridy=1;
			contraintes.insets=new Insets(40,40,0,0);
			panneau.add(commandepompe.pompe.PompeInactive[1],contraintes);
 
			contraintes.gridx=2;
			contraintes.gridy=1;
			contraintes.insets=new Insets(40,40,0,0);
			panneau.add(commandepompe.pompe.PompeActive[2],contraintes);
 
			contraintes.gridx=2;
			contraintes.gridy=1;
			contraintes.insets=new Insets(40,40,0,0);
			panneau.add(commandepompe.pompe.PompeInactive[2],contraintes);
 
			//insertion de l'état des pompes
			contraintes.gridx=0;
			contraintes.gridy=2;
			contraintes.insets=new Insets(40,0,0,0);
			panneau.add(commandepompe.pompe.EtatPomp[0],contraintes);
 
			contraintes.gridx=1;
			contraintes.gridy=2;
			contraintes.insets=new Insets(40,40,0,0);
			panneau.add(commandepompe.pompe.EtatPomp[1],contraintes);
 
			contraintes.gridx=2;
			contraintes.gridy=2;
			contraintes.insets=new Insets(40,40,0,0);
			panneau.add(commandepompe.pompe.EtatPomp[2],contraintes);
 
			//Insertion de la commande des pompes
			contraintes.gridx=0;
			contraintes.gridy=3;
			contraintes.insets=new Insets(40,0,0,0);
			panneau.add(commandepompe.pompe.ComPomp[0],contraintes);
 
			contraintes.gridx=1;
			contraintes.gridy=3;
			contraintes.insets=new Insets(40,40,0,0);
			panneau.add(commandepompe.pompe.ComPomp[1],contraintes);
 
			contraintes.gridx=2;
			contraintes.gridy=3;
			contraintes.insets=new Insets(40,40,0,0);
			panneau.add(commandepompe.pompe.ComPomp[2],contraintes);
 
			//Insertion du label de l'état de prise à distance
			contraintes.gridx=0;
			contraintes.gridy=4;
			contraintes.gridwidth=3;
			contraintes.insets=new Insets(40,0,0,0);
			panneau.add(priseDist.etatprisedist.EtatPrise,contraintes);
 
			//Insertion du bouton de prise à distance
			contraintes.gridx=0;
			contraintes.gridy=5;
			contraintes.gridwidth=3;
			contraintes.insets=new Insets(40,0,0,0);
			panneau.add(priseDist.etatprisedist.BoutonPriseMain,contraintes);
 
 
		}
		catch(Exception e)
		{
			System.out.println("Erreur : "+e.getMessage());
		}
	}
 
	public void destroy()
	{
		try
		{
			comm.disconnect();
		}
		catch(Exception e)
		{
			System.out.println("Erreur : "+e.getMessage());
		}
	}
 
}
Ceci n'est qu'une partie du code, il y a d'autre fichier qui fonctionne très bien. C'est juste cette histoire de prise en main que j'arrive pas à faire fonctionner. MErci d'avance pour la réponse. A Bientôt.