[JADE] Problema output in console di eclipse

di Anonimizzato21203 il
5 risposte
Salve a tutti,
ho da poco iniziato a lavorare con JADE e ho riscontrato questo problema: gli output che mi dovrebbero fornire i behaviour che richiamo non vengono stampati nella console di Eclipse.
Allego i due semplicissimi codici che ho fatto.
AGENTE:
package agenti;

import jade.core.Agent;

public class FirstAgent extends Agent{
	
	protected void setup() {
		
		addBehaviour(new Prova());
		
		doDelete();
		
	}
		
	protected void takeDown() {
		
		System.out.println(getAID().getName() + " è stato terminato");
		
	}
	
}
BEHAVIOUR:
package agenti;

import jade.core.behaviours.Behaviour;

public class Prova extends Behaviour {
	
	public void action() {
		
		System.out.println("Il behaviour è stato eseguito");
		
	}
	
	public boolean done() {
		
		return true;
		
	}

}
Io mi aspetto un output del tipo:
Il behaviour è stato eseguito
nomeAgente è stato terminato

Purtroppo l'output del behaviour non viene stampato.
Vi allego il risultato della console:

mar 19, 2019 1:27:01 PM jade.core.Runtime beginContainer
INFORMAZIONI: ----------------------------------
This is JADE 4.5.0 - revision 6825 of 23-05-2017 10:06:04
downloaded in Open Source, under LGPL restrictions,
at http://jade.tilab.com
----------------------------------------
mar 19, 2019 1:27:01 PM jade.imtp.leap.LEAPIMTPManager initialize
INFORMAZIONI: Listening for intra-platform commands on address:
- jicp://192.168.1.172:1099

mar 19, 2019 1:27:01 PM jade.core.BaseService init
INFORMAZIONI: Service jade.core.management.AgentManagement initialized
mar 19, 2019 1:27:01 PM jade.core.BaseService init
INFORMAZIONI: Service jade.core.messaging.Messaging initialized
mar 19, 2019 1:27:01 PM jade.core.BaseService init
INFORMAZIONI: Service jade.core.resource.ResourceManagement initialized
mar 19, 2019 1:27:01 PM jade.core.BaseService init
INFORMAZIONI: Service jade.core.mobility.AgentMobility initialized
mar 19, 2019 1:27:01 PM jade.core.BaseService init
INFORMAZIONI: Service jade.core.event.Notification initialized
mar 19, 2019 1:27:01 PM jade.mtp.http.HTTPServer <init>
INFORMAZIONI: HTTP-MTP Using XML parser com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser
mar 19, 2019 1:27:01 PM jade.core.messaging.MessagingService boot
INFORMAZIONI: MTP addresses:
http://PC.home:7778/ac
mar 19, 2019 1:27:01 PM jade.core.AgentContainerImpl joinPlatform
INFORMAZIONI: --------------------------------------
Agent container Main-Container@192.168.1.172 is ready.
--------------------------------------------
PrimoAgente@192.168.1.172:1099/JADE è stato terminato

Qualcuno può spiegarmi perchè non viene visualizzato quello che dovrebbe stampare il behaviour?
Grazie in anticipo

5 Risposte

  • little_lakes ha scritto:


    Qualcuno può spiegarmi perchè non viene visualizzato quello che dovrebbe stampare il behaviour?
    Premesso che non conosco assolutamente nulla di JADE. Ma una domanda mi viene spontanea (e dovresti saperla o verificarla tu che usi JADE): chi va a "pescare" quella tua classe FirstAgent? Cioè in virtù di cosa viene riconosciuta e gestita quella tua classe di "agente"?? Questo chiaramente è un concetto esclusivamente specifico di JADE.
  • Lo si richiama configurando l'esecuzione da eclipse. Ma non è quello il problema, l'agente viene avviato e chiuso correttamente. É quello che succede al momento della chiamata del behaviour che non mi torna.
    Se può essere d'aiuto nella mia configurazione di esecuzione ad argument metto: -gui PrimoAgente:agenti.FirstAgent
  • Credo di aver capito il problema. Il setup() come prima cosa credo analizzi tutto il codice presente dentro di esso. Se trova il comando doDelete() aggiorna un flag. A questo punto inizia ad eseguire effettivamente il codice ma, da quanto ho capito, se il flag di doDelete() è attivo, i behaviour non vengono proprio eseguiti. Quindi le uniche cose che vengono eseguite se è presente il comando doDelete() sono i comandi che non richiamano i behaviour (e.g. i println).
    Potete confermare?
  • little_lakes ha scritto:


    Se trova il comando doDelete() aggiorna un flag. A questo punto inizia ad eseguire effettivamente il codice ma, da quanto ho capito, se il flag di doDelete() è attivo, i behaviour non vengono proprio eseguiti. Potete confermare?
    Beh, sì, stando alla documentazione di Agent sembrerebbe così (ma non so dirti di più). Ma la questione semmai sarebbe: perché nel setup dovresti mettere un doDelete() ? E' come dire: ok agente, parti. Poi appena l'agente è in fase di setup: no, allora cancellati e togliti.
    Potrebbe avere senso fare un doDelete() nel setup() se nella fase di setup si dovessero ottenere delle "risorse" (connection db, ecc...) ma una di queste fallisce e quindi devi, giustamente, terminare l'agente perché non avrebbe senso continuare.
    Ma fare un doDelete() indiscriminatamente così, non lo vedo molto sensato ...
  • Grazie della risposta e dell'interessamento. Io chiamavo doDelete() perchè mi aspettavo che prima della sua chiamata venissero eseguiti i behaviour ma mi sbagliavo.
    Grazie mille
Devi accedere o registrarti per scrivere nel forum
5 risposte