2
我想获取当前平台中所有容器的列表。 This question是类似的,但答案已过时,方法是通过查询AMS代理。有没有比通过ACL消息进行通信更简单的方法,我认为这很复杂,应该有一种方法来获取容器的简单列表。感谢您的帮助获取所有JADE容器的列表
我想获取当前平台中所有容器的列表。 This question是类似的,但答案已过时,方法是通过查询AMS代理。有没有比通过ACL消息进行通信更简单的方法,我认为这很复杂,应该有一种方法来获取容器的简单列表。感谢您的帮助获取所有JADE容器的列表
您可以通过使用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
我怎么去知道可用容器的列表?它不允许我访问int size(),因为它是一个私有成员。该怎么办? – Purushottam 2012-02-02 16:29:42
将公共setter/getter添加到ArrayList。例如:public int getAvailableContainersSize(){return availableContainers.size();} – Ravi 2012-02-02 16:32:23
我仍然没有得到如何显示所有容器的列表,请你能帮我在哪里放置代码和什么... – Purushottam 2012-02-02 16:50:49