Salut;
enfaîte mon problème c'est que comment je peux lancer ou arrêter un thread au niveau d'une classe qui hérite d'un JFrame et instanciée par une classe qui hérite d'un Agent ,tout simplement j'ai deux agents qui communiquent entre eux par des messages ACL, un il envoie un message et l'autre le reçoit dont ce dernier va le traiter selon son contenu si l’entête du message vaut "stop" il affiche un message et il s’arrête et si vaut "start" il reste en boucle infinie pour afficher un message
voilà ce que le compilateur m'affiche.
*** Uncaught Exception for agent LA2 ***
java.lang.IllegalThreadStateException
at java.lang.Thread.start(Thread.java:682)
at local_agent_2.LA2.start(LA2.java:2652)
at local_agent_2.AgentL2$1.action(AgentL2.java:65)
at jade.core.behaviours.Behaviour.actionWrapper(Behaviour.java:344)
at jade.core.Agent$ActiveLifeCycle.execute(Agent.java:1552)
at jade.core.Agent.run(Agent.java:1491)
at java.lang.Thread.run(Thread.java:722)
et voici maintenant le code de l'agent récepteur
le code de la classe LA2
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 public class AgentL2 extends jade.gui.GuiAgent { transient protected LA2 Interface_la; public AgentL2() { this.Interface_la = new LA2(this); } protected void setup() { // Printout a welcome message Interface_la = new LA2(this); Interface_la.setVisible(true); System.out.println("Hello! my name is Agent " + getAID().getName() + " is ready."); String localname = "LA2"; AID id = new AID(localname, AID.ISLOCALNAME); DFAgentDescription dfd = new DFAgentDescription(); dfd.setName(id); addBehaviour(new CyclicBehaviour(this) { public void action() { ACLMessage msg = new ACLMessage(ACLMessage.INFORM); ACLMessage msg = receive(); if (msg != null) { System.out.println("j'ai reçu"); String tab[]= msg.getContent().toString().split("#"); // pour récupérer lentête du message puisque est codé de cette manière entête#contenu if(tab[0].equals("stop")) Interface_la.stop(msg); else Interface_la.start(msg); }else block(); } }); }}
NOTE : la tache est considérée comme un thread et elle peut traiter plusieurs cas c'est juste un exemple afin de vous montrer que dans le cas non "stop" il fait ses traitement normalement
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 public class LA2 extends javax.swing.JFrame { /.............................. ................./ public LA2(AgentL2 a) { this.la = a; initComponents(); } ACLMessage msg; Runnable tache = new Runnable() { public void run() { String[] h = msg.getContent().split("#"); String heading = h[0]; switch (heading) { case "stop": { System.out.println("***********************************************Stop****************************"); }break; case "start": { int i=0; while(true){ System.out.println("BONJOUR"+i); i++; } }} }}; Thread thread = new Thread(tache); public void start(ACLMessage msg){ this.msg=msg; thread.start(); } public void stop(ACLMessage msg){ this.msg=msg; thread = new Thread(tache); thread.interrupt(); } /...................................... ....................../ }
Merci d'avance et bien cordialement
Partager