2011-08-11 9 views
9

Uruchamiam JADE osadzone w programie Java, tj. Nie z java jade.Boot .... Teraz chciałem zatrzymać system JADE, ale nie znalazłem dobrego sposobu na zrobienie tego. Mogę wyjść z całego programu przy użyciu System.exit(), ale to nie jest to, co chcę zrobić.Zatrzymaj system JADE (agenty Java)

Próbowałem kilka różnych rzeczy, i udało mi się zatrzymać moich zachowań pełnomocnika, ale kilka wątków nadal działa: AMS, DF, serwer WWW, dyspozytor JADE Timer, kilka wątków Wybawiciel itp

ten sposób moja obecna metoda zamykania wygląda następująco:

@Override 
    public void shutdown() { 
    // TODO This does not work yet.. 
    try { 
     for (WeakReference<AgentController> acr : agents) { 
     AgentController ac = acr.get(); // jade.wrapper.AgentController 
     if (ac != null) ac.kill(); 
     } 
     container.kill(); // jade.wrapper.AgentContainer 
     Runtime.instance().shutDown(); // jade.core.Runtime 
    } catch (StaleProxyException e) { 
     e.printStackTrace(); 
    } 
    } 

powód chcę zrobić to jest, że mam kilka testów JUnit dla mojego systemu agenta.

Jakieś pomysły, jak to osiągnąć?

Odpowiedz

6

Można zażądać AMS zatrzymanie platformy w taki sposób:

Codec codec = new SLCodec();  
Ontology jmo = JADEManagementOntology.getInstance(); 
getContentManager().registerLanguage(codec); 
getContentManager().registerOntology(jmo); 
ACLMessage msg = new ACLMessage(ACLMessage.REQUEST); 
msg.addReceiver(getAMS()); 
msg.setLanguage(codec.getName()); 
msg.setOntology(jmo.getName()); 
try { 
    getContentManager().fillContent(msg, new Action(getAID(), new ShutdownPlatform())); 
    send(msg); 
} 
catch (Exception e) {} 
+0

mam jeszcze kilka wystąpień Deliverer biegania ('jade.core.messaging.MessageManager $ Deliverer'). Problem polega na tym, że nie mogę zabić wątków, na których działają, ponieważ ignorują InterruptedExceptions ... –