分类: 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.
hongweiwhu2008-04-09 19:47:53
神僧,你写的关于Agent方面的文章我全部看完了,大部分都运行了,从中收获很大,再此向你表示感谢。但是发现你有很长时间没有写Agent方面的文章了,希望你笔耕不辍,多写好文章!
hongweiwhu2008-04-04 14:44:10
运行很正确,很好,我想请教下,使用Agent能不能调用本地应用程序呢? 比如在机器1中有个应用程序application1,同时也有一个Agent1,在另一台机器上有一个Agent2,能不能通过Agent2与Agent1进行通信调用application1呢?