分类: Java
2006-12-25 16:27:03
很多朋友问到普通程序与Agent的交互,这里有了。
在main函数中动态创建Agent可以通过先创建另一个容器,然后再这个容器中创建Aent的方法。比如:
public static void main(String[] args) {
// TODO code
application logic here
Runtime rt =
Runtime.instance();
rt.setCloseVM(true);
ContainerController
cc = rt.createAgentContainer(new
ProfileImpl(false));
AgentController
pingAgent = null;
try {
// create
agent and start it
(cc.createNewAgent("hello",
"jadeclient.HelloWorldAgent", new Object[0])).start();
} catch (Exception
e){}
}
可以写如下测试程序,这里用netbeans平台,一个HelloWorldAgent,他将被动态创建并向主容器中的server发送一个消息:
package jadeclient;
/**
*
* @author admin
*/
import jade.core.*;
import jade.core.Agent;
import jade.core.AID;
import jade.lang.acl.ACLMessage;
import jade.core.behaviours.SimpleBehaviour;
public class HelloWorldAgent extends Agent {
public void setup(){
addBehaviour(new SimpleBehaviour(this){
boolean finished=false;
AID server = new AID( "server", AID.ISLOCALNAME );
public
void action()
{
System.out.println("我的本地名称是:"+getLocalName());
ACLMessage
msg = new ACLMessage(ACLMessage.INFORM);
msg.setContent("消息内容" );
msg.addReceiver(server);
send(msg);
System.out.println("已经往主容器中的server发送信息#");
block(
1000 );
finished=true;
}
public boolean done()
{
return
finished;
}
});
};
}
而server角色是收到消息后打印出来。
/*
* ReceiverAgent.java
*
* Created on
*
* To change this template, choose Tools |
Template Manager
* and open the template in the editor.
*/
package jadeclient;
import jade.core.Agent;
import jade.core.AID;
import
jade.core.behaviours.OneShotBehaviour;
import
jade.core.behaviours.CyclicBehaviour;
import
jade.lang.acl.ACLMessage;
/**
*
* @author admin
*/
public class ReceiverAgent
extends Agent {
/** Creates a new instance of ReceiverAgent
*/
//把接收到的信息打印出来
protected void setup()
{
addBehaviour(new CyclicBehaviour(this)
{
public void
action() {
ACLMessage msg= receive();
if (msg!=null)
System.out.println( "收到信息 " +
myAgent.getLocalName() + " <- " +
msg.getContent() );
block();
}
});
}
}
所有类编译完成后,这里运行的时候先在命令行下java jade.Boot –gui,然后gui界面下创建一个名叫server的Agent,其类为jadeclient. ReceiverAgent.
chinaunix网友2010-05-27 11:15:03
您好 現在正在結合Spring、Agent,拜讀此篇文章,已能用class呼叫Agent 想請教如果是反向的,Agent要呼叫一般class,那又應該如何處理呢?
chinaunix网友2008-06-09 23:49:38
请问在jade面板,new一个agent的时候,类的地址是不是要具体指到.class所在的地方? 我现在是没有找到类 谢谢