【问题标题】:How to create multiple containers with jade如何用玉创建多个容器
【发布时间】:2020-05-25 22:29:03
【问题描述】:

我想创建 2 个容器,但我的第二个容器的代理出现问题

错误:代理robot10 在没有被正确终止的情况下死亡!!!

当我删除第二个容器时它可以工作

Runtime Instance = Runtime.instance(); Instance.setCloseVM(true);
ProfileImpl Profile = new ProfileImpl(true);
Profile.setParameter(Profile.CONTAINER_NAME, "Pacman");
Profile.setParameter(Profile.MAIN_HOST, "localhost");



            AgentContainer Conteneur = Instance.createAgentContainer(Profile);

            for (int i = 1; i <= n; i++) {
AgentController Agent = Conteneur.createNewAgent("robot" + String.valueOf(i), "package1.robot", Parametres1);
Agent.start();
}
AgentContainer Conteneur1 = Instance.createAgentContainer(Profile);


AgentController Agent = Conteneur1.createNewAgent("robot10" , "package1.robot", new Object[] {});
Agent.start();

【问题讨论】:

    标签: agent agents-jade


    【解决方案1】:

    它仍然显示错误 这是代码

        package package1;
    
    import jade.Boot;
    import jade.core.AID;
    import jade.core.Agent;
    import jade.core.Profile;
    import static jade.core.Profile.PLATFORM_ID;
    import jade.core.ProfileImpl;
    import jade.domain.DFService;
    import jade.domain.FIPAAgentManagement.DFAgentDescription;
    import jade.domain.FIPAException;
    import jade.lang.acl.ACLMessage;
    import jade.wrapper.AgentContainer;
    import jade.wrapper.AgentController;
    import jade.wrapper.ContainerController;
    import jade.wrapper.StaleProxyException;
    
    
    import javax.swing.UIManager;
    
    public class launch extends Agent {
       static DFAgentDescription agentDescription;private static AID aid;
        static ACLMessage message1, message2;
            launch() throws FIPAException{
    
        agentDescription = new DFAgentDescription();
                agentDescription.setName(getAID());
    
                DFService.register(this, agentDescription);
            DFService.register(this, agentDescription);
    
            }
        public static void main(String[] args) throws StaleProxyException  {
            try {
                UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
            } catch (Exception e) {
            }
    
            try {
                String[] arg = { "-gui","ClusteringAgent:multi.agent_clustering.ClusteringAgent" };
                Boot.main(arg);
            } catch (Exception e) {
                e.printStackTrace();
            }
    
    
    
    
    
            jade.core.Runtime rt = jade.core.Runtime.instance(); rt.setCloseVM(true);
         String containerName="Mycontainer1";
        ProfileImpl pContainer = new ProfileImpl(true);
        pContainer.setParameter(Profile.CONTAINER_NAME,containerName);
    
        System.out.println("Launching container "+pContainer);
        ContainerController containerRef = rt.createAgentContainer(pContainer);
      AgentController Agent = containerRef.createNewAgent("robot" + String.valueOf(1), "package1.launch", new Object[] { 2});
                    Agent.start();
    
    
        //create container2 
        containerName="Mycontainer2";
        pContainer = new ProfileImpl( true);
        pContainer.setParameter(Profile.CONTAINER_NAME,containerName);
        System.out.println("Launching container "+pContainer);
        containerRef = rt.createAgentContainer(pContainer); 
         AgentController Agent1 = containerRef.createNewAgent("robot" + String.valueOf(2), "package1.launch", new Object[] {2});
                    Agent.start();
        }
    }
    

    显示的错误是:

    Exception in thread "main" jade.wrapper.StaleProxyException: Illegal access exception in createAgent() [nested java.lang.IllegalAccessException: Class jade.core.management.AgentManagementService$CommandTargetSink can not access a member of class package1.launch with modifiers ""]
        at jade.wrapper.ContainerController.createNewAgent(Unknown Source)
    

    【讨论】:

      【解决方案2】:

      您的代码中有一个错误,您没有更新容器的配置文件并且为 2 个不同的容器使用相同的名称,这是错误的。

          //create container1 
          String containerName="Mycontainer1";
          ProfileImpl pContainer = new ProfileImpl(PLATFORM_IP, PLATFORM_PORT, PLATFORM_ID);
          pContainer.setParameter(Profile.CONTAINER_NAME,containerName);
      
          System.out.println("Launching container "+pContainer);
          ContainerController containerRef = rt.createAgentContainer(pContainer);
      
          //create container2 
          containerName="Mycontainer2";
          pContainer = new ProfileImpl(PLATFORM_IP, PLATFORM_PORT, PLATFORM_ID);
          pContainer.setParameter(Profile.CONTAINER_NAME,containerName);
          System.out.println("Launching container "+pContainer);
          containerRef = rt.createAgentContainer(pContainer); 
      

      有关 3 个容器的运行示例,请参阅:https://gitlab.com/startjade/startJade

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-01
        • 1970-01-01
        • 2015-06-01
        • 1970-01-01
        • 2021-08-19
        • 2021-05-25
        相关资源
        最近更新 更多