Ho creato un agente cosìfatto:

codice:
package examples.CoordinateAgentAgent;

import jade.core.Agent;
import jade.core.AID;
import jade.core.behaviours.CyclicBehaviour;
import jade.lang.acl.*;


public class CoordinateAgent extends Agent {
	
	
	protected void setup() {
	

                	addBehaviour(new CyclicBehaviour(this) {
	
			public void action() {
				
	                        ACLMessage msg = new ACLMessage(ACLMessage.INFORM);;
		                ACLMessage reply = msg.createReply();
		 		msg.setSender(getAID()); //Per inserire il nome proprio dell'agente mittente

				msg.addReceiver("RMA@miopc:1099/JADE");

				msg.setContent("Ciao");

				send(msg); //Per spedire il messaggio

		
								
			}//Fine action()
			
		});//Fine CyclicBehaviour
	}//Fine setup()
	
}//Fine ExampleAgent
Questo non deve fare altro che ricevere due coordinate x ed y, decidere un messaggio da inviare ad un altro agente ed inviarlo. Tralasciando il fatto che "msg.addReceiver("RMA@miopc:1099/JADE");" viene riconosciuto come errore, xkè non è applicabile una stringa al metodo addReceiver. La mia domanda è un'altra, vorrei far aprire a tale programma un altro programma da me creato:

codice:
/*** 

 NOMEFiLE: SetCoordinate.java
 AUTORE: Baglieri Salvatore & Fundarò Alessandro
 VERSiONE: 1.0 BETA

 OBiETTiVO: A partire dalle coordinate spaziali (x ed y) 
            visualizza il contenuto di 6 Remote Display

 DATA: 28/09/2004

***/


/*** 

 Importo librerie per l'interfaccia GUI

***/

import java.awt.*;                      // per i contenitori di componenti grafiche e il layout
import java.awt.event.*;                // per l'interazione dell'utente con la GUI del programma
import javax.swing.*;                   // per le etichette, le caselle di testo e il bottone

/*** 

 Dichiarazione della classe SetCoordinate che utilizza finestra GUI

***/

public class SetCoordinate extends JFrame {
                    
 private int x, y;                                           // Coordinata X e Y 
 
 private int A=1, B=4, C=6, D=5, 
             E=9, F=18, G=7, H=18;                           // Punti critici del posizionamento  

 private JLabel xLabel, yLabel;                              // Etichette di testo

 private JLabel unoLabel, dueLabel, treLabel, 
                quattroLabel, cinqueLabel, seiLabel;         // Etichette per i display

 private JTextField unoField, dueField, treField, 
                    quattroField, cinqueField, seiField;     // Caselle di testo per i display

 private JTextField xField, yField, display;                 // Caselle di testo

 private JButton button=new JButton("AGGiORNA DiSPLAY!");   //  Pulsante 

/*** 

 Metodo principale SetCoordinate in cui vengono definite le componenti grafiche

***/

 public SetCoordinate () {
    
  // titolo della finestra
  super("Sistema di posizionamento");
 	
  // definizione del contenitore c
  Container c = getContentPane();
  c.setLayout( new FlowLayout() );

  // in risposta ad un'azione eseguita su un componente GUI
  ActionEventi evento = new ActionEventi();

/*** 

 Definizione delle etichette per le coordinate X ed Y

***/

  xLabel = new JLabel( "Posizione X" );
  xField = new JTextField( 10 );
  xField.addActionListener(evento);      
  c.add( xLabel );
  c.add( xField );

  yLabel = new JLabel( "Posizione Y" );
  yField = new JTextField( 10 );
  yField.addActionListener(evento);
  c.add( yLabel );
  c.add( yField );  

  display  = new JTextField( 40 );
  display.setEditable( false );
  c.add( display  );

/*** 

 Definizione delle etichette dei Remote Display in cui verranno visualizzati i messaggi
 in base alle coordinate fornite dal sistema di posizionamento.

***/

  unoLabel = new JLabel( "\nRemote Display  01" );
  unoField = new JTextField( 40 );
  unoField.setEditable( false );
  c.add( unoLabel );
  c.add( unoField );  

  dueLabel = new JLabel( "Remote Display  02" );
  dueField = new JTextField( 40 );  
  dueField.setEditable( false );
  c.add( dueLabel );
  c.add( dueField );  

  treLabel = new JLabel( "Remote Display  03" );
  treField = new JTextField( 40 );
  treField.setEditable( false );
  c.add( treLabel );
  c.add( treField );  

  quattroLabel = new JLabel( "Remote Display  04" );
  quattroField = new JTextField( 40 );
  quattroField.setEditable( false );
  c.add( quattroLabel );
  c.add( quattroField );  

  cinqueLabel = new JLabel( "Remote Display  05" );
  cinqueField = new JTextField( 40 );
  cinqueField.setEditable( false );
  c.add( cinqueLabel );
  c.add( cinqueField );  

  seiLabel = new JLabel( "Remote Display  06" );
  seiField = new JTextField( 40 );
  seiField.setEditable( false );
  c.add( seiLabel );
  c.add( seiField );  

  // bottone aggiunto all'interfaccia grafica ed associato ad un evento
  button.addActionListener(evento);
  c.add(button);

/*** 

 Caratteristiche finestra:
 
 - setSize(Larghezza, Altezza)

 - setLocation(PosizioneX,PosizioneY) 
    Posizioni iniziali rispetto al punto 0, 0 
    situato in alto a sinistra del monitor.

***/

  setSize(500,420);
  setLocation(100,100);

  // Visualizza la finestra 
  show();
     
 }                                     // Fine metodo SetCoordinate


/*** 

 Metodo principale in cui viene aperta la finestra

***/      
   
 public static void main (String args[]) {
   
  SetCoordinate window = new SetCoordinate();

  window.addWindowListener (
   new WindowAdapter () {
    public void windowClosing ( WindowEvent e )
     {
      System.exit(0);
     }
    }
   );

 }                                     // Fine metodo Main


/*** 

 Caricamento dell'ActionListener per la definizione
 delle risposte del programma in seguito ad un'azione
 dell'utente (in questo caso: click sul Button)

***/      

 private class ActionEventi implements ActionListener {
  public void actionPerformed( ActionEvent e )  {

   x=Integer.parseInt (xField.getText());
   y=Integer.parseInt (yField.getText());

   display.setText( "La coordinata X è: " + x +"; mentre la coordinata Y è: " + y );

/*** 

 Nel caso di posizioni non monitorate o errate,
 tutti i display sono spenti (OFF)!

***/    

   unoField.setText(" OFF ");
   dueField.setText(" OFF ");
   treField.setText(" OFF ");
   quattroField.setText(" OFF ");
   cinqueField.setText(" OFF ");
   seiField.setText(" OFF ");

/*** 

 -+ ZONA 1 +-

***/    

   if (x>0 && x<D) {
    if (y>=B && y<=C) {
     unoField.setText("DIPARTIMENTO DI INFORMATICA - Università di Palermo");
     dueField.setText(" OFF ");
     treField.setText(" OFF ");
     quattroField.setText(" OFF ");
     cinqueField.setText("Spazio non monitorato");
     seiField.setText(" OFF ");
    }
   }

/*** 

 -+ ZONA 2 +-

***/    

  if (x>D && x<F) {
    if (y>=B && y<=C) {
     unoField.setText(" OFF ");
     dueField.setText("Laboratorio di ricerca: Ufficio dell'Ing. Sorce - Laureandi - Dott. di Ricerca");
     treField.setText("Aule professori - Servizi Igienici (in fondo a sinistra)");
     quattroField.setText(" OFF ");
     cinqueField.setText(" OFF ");
     seiField.setText(" OFF");
    }
   }

/*** 

 -+ ZONA 3 +-

***/    

  if (x>=G && x<=E) {
    if (y>=C && y<H) {
     unoField.setText(" OFF ");
     dueField.setText(" OFF ");
     treField.setText(" OFF ");
     quattroField.setText(" OFF ");
     cinqueField.setText(" OFF ");
     seiField.setText("Servizi Igienici");
    }
   }

/*** 

 -+ ZONA 4 +-

***/    

  if (x>=D && x<=E) {
    if (y>=A && y<=B) {
     unoField.setText(" OFF ");
     dueField.setText(" OFF ");
     treField.setText(" OFF ");
     quattroField.setText(" Ufficio dell'Ing. Salvatore Sorce ");
     cinqueField.setText(" OFF ");
     seiField.setText(" OFF ");
    }
   }

 }                                     // Fine ActionPerformed

}                                      // Fine ActionEventi

}                                      // Fine Classe
In sintesi, il primo agente deve lanciare il SetCoordinate, prendere il messaggio del primo display e memorizzarlo nel messaggio ACL "msg". Come fare???? Visto che in JAVA non è possibile una cosa del tipo "extends Agent extends JFrame", come estendere le due cose?

Spero nel vostro aiuto....