Adesso Java comincia a farmi arrabbiare... è forse bacata la classe ObjectInputStream? Non è possibile che del codice identico funzioni 3 volte sì e una no...
codice:
import java.io.*;
import java.net.*;
import java.util.Vector;

public class Server extends Thread {

   private class GestioneClient extends Thread {
      private ObjectInputStream ois = null;
      private ObjectOutputStream oos = null;
      private Messaggio msg;
      private int id;

      public GestioneClient(InputStream is, OutputStream os, int id) throws Exception {
         this.id = id;
         ois = new ObjectInputStream(is);
         oos = new ObjectOutputStream(os);
         System.out.println("Costruttore");
      }

      public void run() {
         try {
            while (true) {
               msg = (Messaggio) ois.readObject();
               processaMessaggio(msg);
            }
         } catch (Exception e) { e.printStackTrace(); }
      }

      public void inviaMessaggio(Messaggio msg) throws Exception {
         oos.writeObject(msg);
         oos.flush();
      }

      private void processaMessaggio(Messaggio msg) {
         Vector v = msg.getMessaggio();
         for (int i=0; i<v.size(); i++) System.out.println( v.elementAt(i) );
      }
   }

   private ServerSocket server;
   private InputStream is;
   private OutputStream os;
   private Vector clients;
   private Vector connessioni;
   private boolean attivo;
   private int id;

   public Server() {
      clients = new Vector();
      connessioni = new Vector();
      attivo = true;
   }

   public void run() {
      try {
         server = new ServerSocket(2525);
         while (attivo) {
            Socket c = server.accept();
            System.out.println("Arrivata connessione numero " + clients.size() + 1);
            is = c.getInputStream();
            os = c.getOutputStream();
            id = clients.size();
            clients.add( new GestioneClient(is, os, id) );
            System.out.println("PASSO SUCCESSIVO");
            ((GestioneClient) clients.elementAt(clients.size()-1)).start();
            connessioni.add( new String("Connessione " + (connessioni.size() + 1) + "!") );
            Messaggio msg = new Messaggio( (Vector) connessioni.clone() );
            inviaNuovoVettore(msg);
         }
      } catch (Exception e) { e.printStackTrace(); }
   }

   private void inviaNuovoVettore(Messaggio m) {
      try {
         for (int i=0; i<clients.size(); i++) {
            ((GestioneClient) clients.elementAt(i)).inviaMessaggio(m);
         }
      } catch (Exception e) { e.printStackTrace(); }
   }

   public static void main(String [] args) {
      Server s = new Server();
      s.start();
   }
}
Se tolgo le linee in grassetto tutto funziona perfettamente, se le lascio non compare mai la scritta "PASSO SUCCESSIVO"...
Qualcuno ha una vaga idea del perchè?

N.B.: Ho scritto una chat con del codice praticamente identico... la chat funziona perfettamente!!!

P.S.: Tralasciate il fatto che il messaggio sia costituito da un Vector... mi serviva solo per fare dei test.


Ciao.