You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何解决VS Code中运行JADE平台Java代码时的编译错误

解决VS Code中JADE平台Java代码的编译错误

问题代码

import jade.core.Agent;
import jade.core.Runtime;
import jade.core.Profile;
import jade.core.ProfileImpl;
import jade.core.behaviours.*;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
public class Main {
public static void main(String[] args) {
    Runtime rt = Runtime.instance();
    Profile p = new ProfileImpl();
    AgentContainer container = rt.createMainContainer(p);
    
    try {
        AgentController seller = jade.core.container.createNewAgent("Seller", SellerAgent.class, null);
        seller.start();
    
        String[] buyerArgs = new String[]{"A"};
        AgentController buyer1 = container.createNewAgent("B1", BuyerAgent.class, buyerArgs);
        buyer1.start();
    
        buyerArgs[0] = "B";
        AgentController buyer2 = container.createNewAgent("B2", BuyerAgent.class, buyerArgs);
        buyer2.start();
    
        buyerArgs[0] = "A";
        AgentController buyer3 = container.createNewAgent("B3", BuyerAgent.class, buyerArgs);
        buyer3.start();
    
        buyerArgs[0] = "B";
        AgentController buyer4 = container.createNewAgent("B4", BuyerAgent.class, buyerArgs);
        buyer4.start();
    } catch (Exception e) {
        e.printStackTrace();
    }
}
}

public class BuyerAgent extends Agent {
    private String requestedProduct;
    private String sellerName;
    private List<String> purchasedProducts = new ArrayList<>();

    protected void setup() {
        // Get the requested product name as an argument
        Object[] args = getArguments();
        if (args != null && args.length > 0) {
            requestedProduct = (String) args[0];
        }

        // Add the behavior to request the product from the seller
        addBehaviour(new RequestProductBehaviour());
    }

    private class RequestProductBehaviour extends OneShotBehaviour {
        public void action() {
            ACLMessage message = new ACLMessage(ACLMessage.REQUEST);
            message.setContent(requestedProduct);
            message.addReceiver(sellerName);
            myAgent.send(message);

            // Wait for the seller's response
            addBehaviour(new PurchaseResponseBehaviour());
        }
    }

    private class PurchaseResponseBehaviour extends SimpleBehaviour {
        private boolean receivedResponse = false;

        public void action() {
            MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
            ACLMessage message = myAgent.receive(mt);
            if (message != null) {
                // Product was available and was sold to this buyer
                purchasedProducts.add(requestedProduct);
                receivedResponse = true;
            } else {
                block();
            }
        }

        public boolean done() {
            if (receivedResponse) {
                System.out.println(getLocalName() + " purchased: " + purchasedProducts);
            }
            return receivedResponse;
        }
    }
}

public class SellerAgent extends Agent {
    private int itemsA = 2;
    private int itemsB = 2;
    private List<String> buyers = new ArrayList<>();

    protected void setup() {
        // Add the behavior to handle product request messages
        addBehaviour(new HandleRequestBehaviour());
    }

    private class HandleRequestBehaviour extends CyclicBehaviour {
        public void action() {
            MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.REQUEST);
            ACLMessage message = myAgent.receive(mt);
            if (message != null) {
                String product = message.getContent();
                String buyerName = message.getSender().getLocalName();
                ACLMessage reply = message.createReply();

                if (buyerName.equals("B3") && product.equals("B")) {
                    // Seller cannot sell product B to buyer B3
                    reply.setPerformative(ACLMessage.FAILURE);
                    reply.setContent("Not allowed");
                } else if (product.equals("A") && itemsA > 0) {
                    itemsA--;
                    reply.setPerformative(ACLMessage.INFORM);
                    buyers.add(buyerName);
                } else if (product.equals("B") && itemsB >
                0) {
                    itemsB--;
                    reply.setPerformative(ACLMessage.INFORM);
                    buyers.add(buyerName);
                } else {
                    reply.setPerformative(ACLMessage.FAILURE);
                    reply.setContent("Not available");
                }

                myAgent.send(reply);
            } else {
                block();
            }
        }
    }

    protected void takeDown() {
        System.out.println("Seller " + getLocalName() + " sold to: " + buyers);
    }
}

错误信息

Exception in thread "main" java.lang.Error: 未解决的编译问题: 
        类型Runtime中未定义方法instance()
        Profile无法解析为类型
        ProfileImpl无法解析为类型
        AgentContainer无法解析为类型
        AgentController无法解析为类型
        jade无法解析
        AgentController无法解析为类型
        AgentController无法解析为类型
        AgentController无法解析为类型
        AgentController无法解析为类型

        at Main.main(main.java:10)

解决方案

核心原因

所有编译错误的根源是JADE核心库未被正确添加到项目的编译路径中,导致Java编译器无法识别JADE提供的Runtime、Profile、AgentContainer等类和方法。

具体解决步骤

  1. 引入JADE库

    • 下载对应版本的JADE包,提取其中的jade.jar文件
    • 在VS Code项目中创建lib目录,将jade.jar放入该目录
    • 右键点击jade.jar,选择Add to Build Path,让编译器识别该依赖
  2. 修正代码中的语法与逻辑问题

    • 错误1:创建Seller Agent的方法调用错误
      将jade.core.container.createNewAgent("Seller", SellerAgent.class, null)改为container.createNewAgent("Seller", SellerAgent.class, null),createNewAgent是AgentContainer实例的方法,而非静态方法
    • 错误2:缺少集合类导入
      在BuyerAgent和SellerAgent的顶部添加导入语句:
      import java.util.List;
      import java.util.ArrayList;
      
    • 错误3:BuyerAgent中sellerName未初始化且消息接收方格式错误
      在BuyerAgent的setup方法中添加sellerName = "Seller";,同时将message.addReceiver(sellerName)改为message.addReceiver(new jade.core.AID(sellerName, jade.core.AID.ISLOCALNAME)),因为JADE消息接收方需要传入AID对象而非字符串名称

修正后的完整代码

import jade.core.Agent;
import jade.core.Runtime;
import jade.core.Profile;
import jade.core.ProfileImpl;
import jade.core.AgentContainer;
import jade.core.AgentController;
import jade.core.behaviours.*;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;
import java.util.List;
import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {
        Runtime rt = Runtime.instance();
        Profile p = new ProfileImpl();
        AgentContainer container = rt.createMainContainer(p);
        
        try {
            AgentController seller = container.createNewAgent("Seller", SellerAgent.class, null);
            seller.start();
        
            String[] buyerArgs = new String[]{"A"};
            AgentController buyer1 = container.createNewAgent("B1", BuyerAgent.class, buyerArgs);
            buyer1.start();
        
            buyerArgs[0] = "B";
            AgentController buyer2 = container.createNewAgent("B2", BuyerAgent.class, buyerArgs);
            buyer2.start();
        
            buyerArgs[0] = "A";
            AgentController buyer3 = container.createNewAgent("B3", BuyerAgent.class, buyerArgs);
            buyer3.start();
        
            buyerArgs[0] = "B";
            AgentController buyer4 = container.createNewAgent("B4", BuyerAgent.class, buyerArgs);
            buyer4.start();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

public class BuyerAgent extends Agent {
    private String requestedProduct;
    private String sellerName;
    private List<String> purchasedProducts = new ArrayList<>();

    protected void setup() {
        // 初始化卖家名称
        sellerName = "Seller";
        // 获取请求的产品参数
        Object[] args = getArguments();
        if (args != null && args.length > 0) {
            requestedProduct = (String) args[0];
        }

        // 添加请求产品的行为
        addBehaviour(new RequestProductBehaviour());
    }

    private class RequestProductBehaviour extends OneShotBehaviour {
        public void action() {
            ACLMessage message = new ACLMessage(ACLMessage.REQUEST);
            message.setContent(requestedProduct);
            // 通过本地名称获取卖家的AID
            message.addReceiver(new jade.core.AID(sellerName, jade.core.AID.ISLOCALNAME));
            myAgent.send(message);

            // 添加等待响应的行为
            addBehaviour(new PurchaseResponseBehaviour());
        }
    }

    private class PurchaseResponseBehaviour extends SimpleBehaviour {
        private boolean receivedResponse = false;

        public void action() {
            MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
            ACLMessage message = myAgent.receive(mt);
            if (message != null) {
                // 成功购买产品
                purchasedProducts.add(requestedProduct);
                receivedResponse = true;
            } else {
                block();
            }
        }

        public boolean done() {
            if (receivedResponse) {
                System.out.println(getLocalName() + " purchased: " + purchasedProducts);
            }
            return receivedResponse;
        }
    }
}

public class SellerAgent extends Agent {
    private int itemsA = 2;
    private int itemsB = 2;
    private List<String> buyers = new ArrayList<>();

    protected void setup() {
        // 添加处理请求的行为
        addBehaviour(new HandleRequestBehaviour());
    }

    private class HandleRequestBehaviour extends CyclicBehaviour {
        public void action() {
            MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.REQUEST);
            ACLMessage message = myAgent.receive(mt);
            if (message != null) {
                String product = message.getContent();
                String buyerName = message.getSender().getLocalName();
                ACLMessage reply = message.createReply();

                if (buyerName.equals("B3") && product.equals("B")) {
                    // 禁止卖给B3产品B
                    reply.setPerformative(ACLMessage.FAILURE);
                    reply.setContent("Not allowed");
                } else if (product.equals("A") && itemsA > 0) {
                    itemsA--;
                    reply.setPerformative(ACLMessage.INFORM);
                    buyers.add(buyerName);
                } else if (product.equals("B") && itemsB > 0) {
                    itemsB--;
                    reply.setPerformative(ACLMessage.INFORM);
                    buyers.add(buyerName);
                } else {
                    reply.setPerformative(ACLMessage.FAILURE);
                    reply.setContent("Not available");
                }

                myAgent.send(reply);
            } else {
                block();
            }
        }
    }

    protected void takeDown() {
        System.out.println("Seller " + getLocalName() + " sold to: " + buyers);
    }
}

内容的提问来源于stack exchange,提问作者xfull xfullian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 22:01:03