我在Java程序中运行嵌入JADE,即没有java jade.Boot ...
。
现在我想停止JADE系统,但我找不到好办法。
我可以使用System.exit()退出整个程序,但这不是我想要做的。
我尝试了几种不同的东西,我成功阻止了我的代理行为, 但是有几个线程继续运行:AMS,DF,Web服务器,JADE Timer调度程序,几个Deliverer线程等。
这是我当前的关机方法:
@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测试 代理人制度。
任何想法如何实现?
答案 0 :(得分:7)
您可以请求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) {}