ho provato a fare una cosa brutale: ho eliminato sia synchronized che Socket ClientSocket = null per vedere cosa accadeva, ma ho lo stesso problema.
Non é che avendo definito thread e interfaccia grafica su due classi diverse, ogni volta che viene attivato un thread viene eseguita la classe del thread e quella dell'interfaccia viene "scartata"?