2011-08-11 91 views
9

我運行嵌入到Java程序中的JADE,即不與java jade.Boot ...。 現在我想停止JADE系統,但我發現沒有好的方法來做到這一點。 我可以使用System.exit()退出整個程序,但這不是我想要做的。停止JADE系統(Java代理)

我嘗試了幾種不同的東西,我成功阻止我的經紀人的行爲, 但夫婦線程繼續運行:在AMS中,DF,web服務器,玉定時調度,幾個拯救線程等

這是我目前的關機方法的樣子:

@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(); 
    } 
    } 

我想這樣做的原因是,我有我的 代理系統的一些JUnit測試。

任何想法如何實現?

回答

6

您可以要求AMS停在這樣的方式在平臺:

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

我仍然在運行拯救的多個實例('jade.core.messaging.MessageManager $ Deliverer')。這些問題是我不能殺死它們正在運行的線程,因爲它們忽略InterruptedExceptions ... –