Io ho risolto questo problema delegando il compito di ascoltare ad un thread. Ad esempio:
class chiudiPartita extends Thread {
private Socket s;
private Partita p;
DataInputStream fromS = null;
public chiudiPartita (Socket a, Partita b)
{
s=a;
p=b;
fromS = new DataInputStream(s.getInputStream());
}
public void run()
{
if (true==fromS.readBoolean())
{
s.close();
p.interrupt();
}
}
}
Questa classe viene richiamata all' interno del thread "partita" .Quando il flusso proveniente dal socket comunica "true" la partita si chiude, ma contemporaneamente essa continua l' esecuzione del suo corpo (cosa che non sarebbe stata possibile se la stessa chiamata fosse stata effettuata all' interno del suo stesso corpo).
Questa strategia si potrebbe applicare in molti altri casi. Ad esempio un programma server che gestisce la comunicazione tra client (in una chat) può rimanere in ascolto "contemporaneamente" di molti collegamenti.
Conoscete qualche altro sistema o qualche modo per migliorare questo?