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

Java NetBeans GUI与JADE多智能体系统通信实现问询

实现Java GUI与JADE智能体的通信

要实现GUI与JADE智能体的通信,核心是利用JADE的ACL消息机制(Agent Communication Language)——这是JADE智能体间及外部程序与智能体通信的标准方式。以下是针对你现有代码的修改方案:

步骤1:更新Agent类,添加消息接收与处理逻辑

修改Ag1类,让它能接收并处理来自GUI的文本消息:

import jade.core.Agent;
import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.ACLMessage;
import jade.lang.acl.MessageTemplate;

public class Ag1 extends Agent{

    @Override
    public void setup(){
        // 添加循环行为,监听并处理来自GUI的消息
        addBehaviour(new Comportamiento());
    }

    @Override
    public void takeDown(){
        System.out.println("Ag1 已停止");
    }

    class Comportamiento extends CyclicBehaviour{

        @Override
        public void action() {
            // 创建消息模板,只接收INFORM类型的消息(可按需调整)
            MessageTemplate mt = MessageTemplate.MatchPerformative(ACLMessage.INFORM);
            ACLMessage msg = myAgent.receive(mt);
            
            if(msg != null){
                // 获取GUI传递的文本内容
                String textFromGUI = msg.getContent();
                System.out.println("Ag1 收到GUI的消息:" + textFromGUI);
                
                // 此处添加自定义业务处理逻辑,比如文本解析、任务执行等
                processText(textFromGUI);
            } else {
                // 无消息时阻塞行为,避免空轮询浪费资源
                block();
            }
        }
        
        // 示例:文本处理方法
        private void processText(String text){
            System.out.println("正在处理文本:" + text);
            // 可扩展具体处理逻辑,如分词、计算、调用外部服务等
        }
    }
}

步骤2:修改Contenedor类,暴露AgentContainer引用

让GUI能获取AgentContainer实例,以便查找目标智能体:

import jade.core.Profile;
import jade.core.ProfileImpl;
import jade.core.Runtime;
import jade.wrapper.AgentContainer;
import jade.wrapper.StaleProxyException;
import java.util.logging.Level;

public class Contenedor {
    private AgentContainer contenedorAgentes;

    public void contenedor(){
        Runtime runtime = Runtime.instance();
        Profile profile = new ProfileImpl(null, 1097, null);
        contenedorAgentes = runtime.createMainContainer(profile);
        agregarAgentes();
    }
 
    private void agregarAgentes(){
        try {
            contenedorAgentes.createNewAgent("Ag1", Ag1.class.getName(), null).start();
        } 
        catch (StaleProxyException ex) {
            java.util.logging.Logger.getLogger(Contenedor.class.getName()).log(Level.SEVERE, null, ex);
        }
    }    
    
    // 添加方法,返回AgentContainer实例
    public AgentContainer getContenedorAgentes(){
        return contenedorAgentes;
    }
}

步骤3:修改GUI类,实现按钮点击发送消息给Ag1

在按钮点击事件中,创建ACL消息并发送给目标智能体:

import jade.lang.acl.ACLMessage;
import jade.wrapper.AgentController;
import jade.wrapper.StaleProxyException;

public class GUI extends javax.swing.JFrame {
    Contenedor c;

    public GUI() {
        initComponents();
        c = new Contenedor();
        c.contenedor();
    }

    // 自动生成的initComponents方法保持不变,此处省略
    
    private void btnDesplegarActionPerformed(java.awt.event.ActionEvent evt) {                                             
        String inputText = txtArea.getText();
        if(inputText.trim().isEmpty()){
            System.out.println("文本域不能为空");
            return;
        }
        
        try {
            // 获取Ag1的AgentController
            AgentController ag1Controller = c.getContenedorAgentes().getAgent("Ag1");
            
            // 创建ACL消息,设置消息类型为INFORM
            ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
            // 添加目标智能体的AID
            msg.addReceiver(ag1Controller.getAID());
            // 设置消息内容为文本域的输入内容
            msg.setContent(inputText);
            
            // 通过AgentController异步发送消息
            ag1Controller.putO2AObject(msg, AgentController.ASYNC);
            
            System.out.println("已向Ag1发送消息:" + inputText);
            // 可选:发送后清空文本域
            txtArea.setText("");
        } catch (StaleProxyException ex) {
            java.util.logging.Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, "无法发送消息给Ag1", ex);
        }
    }                                            

    // main方法和变量声明保持不变,此处省略
}

关键说明

  • ACL消息:JADE智能体通信的标准载体,支持多种消息类型(INFORM、REQUEST等),可根据业务场景选择适配类型。
  • AgentController:通过AgentContainer获取目标智能体的控制器,是外部程序(如GUI)与智能体通信的桥梁。
  • 行为阻塞:在Agent的CyclicBehaviour中,无消息时调用block()方法,避免空轮询消耗CPU资源。

内容的提问来源于stack exchange,提问作者Daniel Velin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:50:29