我创建了一个接受值的代理,然后将消息传递给下一个代理。我输入值时遇到问题,因此我的消息也没有被转移。这是我的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);
}
}
});
}
答案 0 :(得分:0)
如果您不需要立即使用本体,请不要。对于您可以使用的字符串:
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);