Java - accept en ServerSocket interfiere con la GUI

   
Vista:

accept en ServerSocket interfiere con la GUI

Publicado por mila diaz (7 intervenciones) el 03/06/2010 10:19:04
Hola a todos

Tengo un problema con un programa... quiero aceptar varias conexiones en un servidor para implementar un chat multiusuario con interfaz gráfica. Necesito dos conexiones entre cada cliente y el servidor para intercambiar la información de conversación y la de contro (los nicks de los nuevos clientes, por ejemplo). Cada vez que un cliente se conecta, quiero su nick en un JList.

El siguiente código funciona sin interfaz gráfico... el problema es que recibo el nick del nuevo usuario (línea después de ***) pero el JList no muestra el elmento, por la sentencia accept de la siguiente pasada del while... puedo ver el elemento añadido en el JList con el debugger y con un simple System.out.println, pero el elemento no se ve. Sin embarbo, si quito el while, el nick sí se ve... he probado con un repaint() en la última línea del while y nada...

alguna sugerencia por favor?

Gracias de antemano


while (true) {
socket[contador] = socketServidor.accept();
bufferEntrada[contador] = new DataInputStream(socket[contador].getInputStream());
bufferSalida[contador] = new DataOutputStream(socket[contador].getOutputStream());
//llamada al Thread del Servidor

aceptarClientes[contador] = new servidorThread(bufferEntrada[contador], bufferSalida);
aceptarClientes[contador].start();

socketC[contador] = socketServidor2.accept();
bufferEntradaCliente[contador] = new DataInputStream(socketC[contador].getInputStream());
bufferSalidaCliente[contador] = new DataOutputStream(socketC[contador].getOutputStream());

// ***
nickName[contador] = bufferEntradaCliente[contador].readUTF();
modelo.addElement(nickName[contador]);

contador++;

}
Edit/Delete Message
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:accept en ServerSocket interfiere con la GUI

Publicado por YamilBracho (2072 intervenciones) el 03/06/2010 20:48:30
Agregas el nick al modelo en que esta basado tu JList
LO haces con SwingUtilities y el metodo invokeAdnWait
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:accept en ServerSocket interfiere con la GUI

Publicado por mila (7 intervenciones) el 03/06/2010 21:41:20
Gracias, mañana lo pruebo...

(perdón por el otro mensaje... no sé a qué le he dado, que ha salido como un hilo nuevo, pero no lo puedo borrar...)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:accept en ServerSocket interfiere con la GUI

Publicado por mila (7 intervenciones) el 04/06/2010 09:11:44
he puesto

try {
SwingUtilities.invokeAndWait(new Runnable() {

public void run() {
modelo.addElement(nickName[contador]);
}
});
} catch (InterruptedException ex) {
Logger.getLogger(ventanaServidor.class.getName()).log(Level.SEVERE, null, ex);
} catch (InvocationTargetException ex) {
Logger.getLogger(ventanaServidor.class.getName()).log(Level.SEVERE, null, ex);
}


y no me funciona...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:accept en ServerSocket interfiere con la GUI

Publicado por mila (7 intervenciones) el 04/06/2010 09:30:01
no me deja utilizar invokeAndWait desde ese código porque está en un manejador de evento. Me dice

Cannot call invokeAndWait from the event dispatcher thread
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:accept en ServerSocket interfiere con la GUI

Publicado por YamilBracho (2072 intervenciones) el 04/06/2010 19:58:05
Puedes mostrar el codigo que estas usando ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:accept en ServerSocket interfiere con la GUI

Publicado por YamilBracho (2072 intervenciones) el 04/06/2010 20:01:28
Chequea http://foro.chuidiang.com/java-j2se/excepcion-con-invokeandwait-en-jtable/?action=printpage
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

ya miré y probé esto que me comentas

Publicado por mila (7 intervenciones) el 06/06/2010 22:17:47
y nada, tampoco funciona... es desesperante. Si quito el bucle, muestra el JList actualizado, sino no...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar