停止JADE系统(Java代理)

dan*_*ann 11 java agents-jade

我在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();
    }
  }
Run Code Online (Sandbox Code Playgroud)

我想这样做的原因是我的代理系统有一些JUnit测试.

任何想法如何实现?

Lev*_*ich 8

您可以通过以下方式请求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) {}
Run Code Online (Sandbox Code Playgroud)