11

私は JADE を Java プログラムに埋め込んで実行してい java jade.Boot ...ます。今、私は JADE システムを止めたいと思っていましたが、良い方法が見つかりませんでした。System.exit() を使用してプログラム全体を終了できますが、それは私がやりたいことではありません。

いくつかの異なることを試し、エージェントの動作を停止することに成功しましたが、いくつかのスレッド (AMS、DF、Web サーバー、JADE タイマー ディスパッチャ、いくつかの配信スレッドなど) は引き続き実行されています。

これは私の現在のシャットダウン方法がどのように見えるかです:

  @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 テストがいくつかあるからです。

それを達成する方法はありますか?

4

2 に答える 2

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) {}
于 2011-08-11T13:45:50.720 に答える