java.lang.ClassCastException

Godo
30 de Septiembre del 2003
Hola, tengo un extraño problema.

Estoy diseñando una aplicacion cliente/servidor de juegos de cartas.

Un cliente, se conecta al servidor y este le devuelve la lista de clientes conectados. Para todas las comunicaciones uso ObjectOutputStream.

Los datos los devuelvo en un objeto de tipo "MensajeRed" que lleva 2 campos, el tipo de objeto que transporta y el objeto en si para hacer el casting en el cliente.

Para mandar la lista de clientes conectados uso un Vector, que contiene objetos del tipo ClienteEnMesa de la siguiente manera:

class ClienteEnMesa implements Serializable{

String nick;
int posX;
int posY;
int posSentado;
}

Este vector con la lista de todos los clientes se envia al cliente enrtrar al salon y al salir de una mesa.

El problema está cuando entran 2 jugadores. Entra el primero (llamemosle A), entra el segundo (B), y no hay problemas.

Entonces A se sienta en una mesa. Sale de la mesa (momento en que el servidor manda a "A" el vector con todos los clientse conectados, en este caso 2, A y B). El cliente A recibe el Vector, hace casting del primer "ClienteEnMesa" recibido, pero cuando hace casting del segundo salta la excepcion "java.lang.ClassCastException".

Si hago lo mismo con el cliente B no salta esta excepcion. Pero si añado un tercer cliente, y entro y salgo con B de la mesa, me salta esta excepcion al hacer el casting a "ClienteEnMesa" del tercer elemento.

Siempre se produce la excepcion si hay más clientes conectados de los que habia cuando entra al Salon (la primera vez que recibe la lista de clientes).

-He comprobado que desde el servidor se manda correctamente el Vector.

-En principio pensé que podia ser, que una vez definido el tamaño del Vector(¿¿??) nada mas entrar al salon, java asumia que siempre le iba a llegar con el mismo tamaño, y al llegar "un elemento de mas", cascaba. Pero lo extraño de todo esto, es que probé a enviar objetos String simplemente dentro del Vector (en vez de ClienteEnMesa) y no me ocurre este error. Y también es reseñable que el error me da, no al hacer Casting del Vector, sino al recorrer este con Vector.hashMoreElements(), y al hacer casting a "ClienteEnMesa". Me reconoce que tiene 2 elementos el Vector (vamos, que realiza una segunda iteracion), pero al hacer el casting del segundo casca.

Perdon por la parrafada, pero como es un error extraño queria dar todos los detalles posibles.

Gracias por adelantado

Un saludo.

Godo