Newsgroup: it.comp.java
Titolo: Da Delphi a Java: come realizzare un evento?

Buongiorno a tutti!
Sto cercando di imparare Java per un progetto all'università ed in pratica 
sto migrando da Delphi...
Ultimamente mi  è capitato di avere a che fare più volte con le socket e 
quindi, invece di ripartire a scrivere da zero codice tutte le volte, stavo 
pensando ad una ingegnerizzazione del codice, in modo da renderlo 
riusabile...
In Delphi avrei creato un componente, in Java mi basta creare una classe...
Tuttavia non riesco a capire come fare per convertire certe sintassi, come 
ad esempio gli eventi...
Mi spiego con un esempio: si supponga di voler realizzare un classe 
riusabile che gestisce una ServerSocket multiclient... conterrà "proprietà" 
(uso sempre la terminologia di Delphi, scusatemi) come Port (la porta alla 
quale mettersi in ascolto) e "metodi" come Listen (attiva la socket in 
ascolto), Close (chiudi la socket) ecc. e fin qui nessun problema...
Di progetto in progetto, ciò che cambia è il codice da eseguire dentro al 
Run di ogni thread attivato dalla ServerSocket... se fossi in Delphi avrei 
un evento OnRun a cui associerei di volta in volta il blocco di codice che 
intendo fargli eseguire... non riesco proprio a capire come fare per 
ottenere un comportamento simile in Java...
Potreste per cortesia aiutarmi voi? Avrei bisogno di un suggerimento, o e 
possibile di 5 righe di numero di codice di esempio per farmi capire come si 
traduce in Java questa cosa...
Grazie davvero anticipatamente,
                Stefano 

 ottenere un comportamento simile in Java...
Da neofita a neofita:
La tua classe deve accettare nel costruttore un riferimento ad un 
interfaccia (per esempio EseguiLavoroListener)
e dentro il metodo run chiami EseguicomandoListener.eseguiMetodo()
Poi implementi nella classe da cui chiami il thread l'interfaccia, e gli 
passi this.
Esempio reale:
public class public class HttpDatabaseConnection implements Runnable
{
public HttpDatabaseConnection(String sourcemdb, String query, 
FilterDownloadedListener filterDownloadedWaiter)
    {
        super();
        this._sourcemdb = sourcemdb;
        this._query = query;
        this._filterDownloadedWaiter = filterDownloadedWaiter;
    }
public void run()
 {
     try
     {
         // Faccio le mie cose
         // Tutto ok: passo le informazioni al listener
         if(proceed)
         {
             // Chiamo i listener attivi
             if(this._filterDownloadedWaiter != null)
                 this._filterDownloadedWaiter.filterDownloaded(this._result);
          }
     }
  //Eccezione generica, se si verifica un errore di connessione
  catch(Exception ex)
  {
   ex.printStackTrace();
  }
 }
}
public class MainApp implements FilterDownloadedListener
{
    // Codice
    public void filterDownloaded(Filter filter)
   {
    // Lavora, bestia!
   }
    // Codice
}
Ciao :) 

Grazie mille!
Adesso "viviseziono" il codice e son convinto di risolvere entro breve...
Mi consola il fatto che supponessi da prima di dover usare le interfacce,
peccato che da solo non ci avessi cavato un ragno dal buco...
Adesso come adesso mi vien da dire che Java rispetto a Delphi č l'Ufficio
Complicazione Cose Semplici...
Ad ogni modo, grazie mille!
Stefano

 Complicazione Cose Semplici...
Ma poi ti accorgerai della sua potenza....
M 

> Adesso come adesso mi vien da dire che Java rispetto a Delphi è l'Ufficio
