外部应用程序调用Agent
来源:互联网 发布:ubuntu适配的手机型号 编辑:程序博客网 时间:2024/04/30 10:13
JADE2.3以后的版本都提供了in-process接口来实现外部应用程序对agent的调用。
我们可以通过jade.core.Runtime.instance()来获得jade运行时的一个单独得实例。有两种方法可以用来创建一个jade主容器和一个jade远程容器。主要调用过程如下:
先看简单的例子:
package inprocess;
import jade.core.*;
import jade.core.behaviours.*;
/**
*
* @author Administrator
*/
public class CustomAgent extends Agent{
public void setup(){
SimpleBehaviour helloBehaviour=new SimpleBehaviour(this) {
boolean finished=false;
public void action() {
System.out.println("Hello World Behaviour run: 你好,世界!");
System.out.println("-----我是:-----");
System.out.println("我的本地名称是:"+getLocalName());
System.out.println("我全局唯一的标志名称为:"+getName() );
finished=true;
}
public boolean done() {
return finished;
}
};
addBehaviour(helloBehaviour);
}
}以上是要调用的agent类
package inprocess;
import jade.core.Runtime;
import jade.core.Profile;
import jade.core.ProfileImpl;
import jade.core.behaviours.SimpleBehaviour;
import jade.wrapper.*;
import jade.core.Agent;
public class InprocessTest {
public static void main(String args[]) {
try{
Runtime rt = Runtime.instance();
rt.setCloseVM(true);
Profile pMain = new ProfileImpl(null, 8888, null);
System.out.println("Launching a whole in-process platform..."+pMain);
AgentContainer mc = rt.createMainContainer(pMain);
// set now the default Profile to start a container
ProfileImpl pContainer = new ProfileImpl(null, 8888, null);
System.out.println("Launching the agent container ..."+pContainer);
AgentController custom=mc.createNewAgent("custom","inprocess.CustomAgent",null);
custom.start();
}
catch (Exception e){
e.printStackTrace();
}
}
}//以上是调用者,在netbeans中调试通过。
再看一个例子,也是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;
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 2006年12月25日, 下午3:28
*
* 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.
然后运行main函数,成功后打印出的结果分别如上图,其中netbeans平台中下面显示的是hello打印出的信息,而命令行中显示的是server收到hello发的信息后打印出来的。可见在同一主机的不同容器中agent通信与在同一容器中通信并无二样。
- 外部应用程序调用Agent
- 外部应用程序调用Agent
- 外部应用程序调用Agent
- 外部应用程序调用Agent
- 外部应用程序调用Agent
- qt4:调用外部应用程序
- C#调用外部应用程序
- java调用外部应用程序
- java 调用外部应用程序
- qt4:调用外部应用程序
- C#调用外部应用程序
- 【C#】调用外部应用程序
- java调用外部应用程序
- C#调用外部应用程序
- C#怎样调用外部应用程序?
- asp.net 调用外部应用程序
- 浏览器如何调用外部应用程序
- WEB页面调用外部应用程序
- 学习silverlight
- 学习silverlight
- Lighttpd相对路径的问题
- gdb中文手册(debuging with gdb) 支持pdf xps
- 外部应用程序调用Agent
- 外部应用程序调用Agent
- 外部应用程序调用Agent
- 行为诡异的子查询与非常用谓词ANY/ALL/SOME
- 全局文件配置session 做身份识别和购物车
- 外部应用程序调用Agent
- 外部应用程序调用Agent
- 不重复随机数
- POJ_1664
- java多线程五:同步代码块