我已经创建了一个代理,它接受一个值,然后将消息传递给下一个代理。我在输入值时遇到问题,所以我的消息也没有被传输。下面是我的Agent类。有人知道我能做些什么来修复它吗?
public class Prgm extends Agent {
int val;
protected void setup() {
Objects[] args = getArguments();
if (args!=null && args.length > 0)
val = Integer.parseInt((String) args[0]);
addBehaviour(new OneShotBehaviour(this) {
public void action() {
if (val == 1) {
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.setLanguage("english");
msg.SetOntology("DG Status");
msg.SetContent("DG connected");
msg.addReceiver(new AID("r1", AID.ISLOCALNAME));
myAgent.send(msg);
} else {
ACLMessage msg = new ACLMessage(ACLMessage.INFORM);
msg.addReceiver(new AID("r1", AID.ISLOCALNAME));
msg.setLanguage("english");
msg.setOntology("DG Status");
msg.setContent("DG not connected");
send(msg);
}
}
});
}发布于 2014-12-21 23:30:54
如果你不需要立即使用本体,那么就不要使用。对于字符串,你可以使用:
ACLmessage.setContent("string message") and String stringmsg=ACLmessage.getContent()如果您需要更多东西,请尝试Java序列化,它比使用本体简单得多。
我也不认为这条线是可以接受的。new AID("r1", AID.ISLOCALNAME)。人们通常会联系df (目录促进器)代理来查询可用代理或服务。试试这样的东西
DFAgentDescription template = new DFAgentDescription();
ServiceDescription sd= new ServiceDescription();
sd.setType(Service);
sd.setName(agentName);
template.addServices(sd);
try {
DFAgentDescription[] result = DFService.search(this, template);
listAgents.clear();
for(int i = 0; i<result.length;++i)
{
listAgents.addElement(result[i].getName());
}
//System.out.println(listAgents);
} catch (FIPAException e) {
// TODO Auto-generated catch block
e.printStackTrace();
log(this.getAID() +"!!error in requesting service ="+Service);
}
return (AID) listAgents.get(0);https://stackoverflow.com/questions/21423250
复制相似问题