2012-02-01 67 views
2

我想获取当前平台中所有容器的列表。 This question是类似的,但答案已过时,方法是通过查询AMS代理。有没有比通过ACL消息进行通信更简单的方法,我认为这很复杂,应该有一种方法来获取容器的简单列表。感谢您的帮助获取所有JADE容器的列表

回答

4

您可以通过使用AMSSubscriber类来实现此目的,并在添加或删除容器时收听事件。请参见下面的示例代码:

public class myAgent extends Agent { 

    private ArrayList<ContainerID> availableContainers = new ArrayList<ContainerID>(); 

    /** 
    * Agent initializations 
    **/ 
    protected void setup() { 

    AMSSubscriber subscriber = new AMSSubscriber(){ 
     protected void installHandlers(Map handlers){ 
     EventHandler addedHandler = new EventHandler(){ 
      public void handle(Event event){ 
       AddedContainer addedContainer = (AddedContainer) event; 
       availableContainers.add(addedContainer.getContainer()); 
      } 
     }; 
    handlers.put(IntrospectionVocabulary.ADDEDCONTAINER,addedHandler); 


     EventHandler removedHandler = new EventHandler(){ 
      public void handle(Event event){ 
       RemovedContainer removedContainer = (RemovedContainer) event; 
       ArrayList<ContainerID> temp = new ArrayList<ContainerID>(availableContainers); 
       for(ContainerID container : temp){ 
        if(container.getID().equalsIgnoreCase(removedContainer.getContainer().getID())) 
         availableContainers.remove(container); 
       } 
      } 
     }; 
     handlers.put(IntrospectionVocabulary.REMOVEDCONTAINER,removedHandler); 
     } 
    }; 
    addBehaviour(subscriber); 
    } 
} 

参考:1)发展与JADE 多智能体系统通过法比奥·路易吉Bellifemine,乔瓦尼·凯尔,多米尼克·格林伍德(第111页) 2)Jade API

+0

我怎么去知道可用容器的列表?它不允许我访问int size(),因为它是一个私有成员。该怎么办? – Purushottam 2012-02-02 16:29:42

+0

将公共setter/getter添加到ArrayList。例如:public int getAvailableContainersSize(){return availableContainers.size();} – Ravi 2012-02-02 16:32:23

+0

我仍然没有得到如何显示所有容器的列表,请你能帮我在哪里放置代码和什么... – Purushottam 2012-02-02 16:50:49