Foros del Web » Programación para mayores de 30 ;) » Java »

Manipular Sockets con Swing (GUI) HEEEEEEELP!

Estas en el tema de Manipular Sockets con Swing (GUI) HEEEEEEELP! en el foro de Java en Foros del Web. Bueeenas. Hay un proyecto que tengo que hacer que involucra sockets, pero necesito aprender a usarlos. Se como usarlos sin usar "forms", sin hacer uso ...
  #1 (permalink)  
Antiguo 11/06/2009, 17:40
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
Busqueda Manipular Sockets con Swing (GUI) HEEEEEEELP!

Bueeenas.

Hay un proyecto que tengo que hacer que involucra sockets, pero necesito aprender a usarlos.

Se como usarlos sin usar "forms", sin hacer uso del swing.

pero a la hora de usar el swing, todos los botoncitos y etc... En ese punto no se como hacer para mantener la conexión, y poder enviar mensajes.

Lo que tengo hecho por linea de comandos es un chat que me funciona a la perfección.

Pero cuando trato de usar los sockets con las librerias de swing, no me trabaja bien eso.

No se como dejar la conexión abierta del socket para yo poder enviar mensajes y recibirlos.
Todo lo que logro hacer es un botón que me abre la conexión y me envie y recibe el mensaje, despues de ahi se me inutiliza.

Como hago para utilizar sockets con swing?
Si tienen un ejemplo o algo porfa ayudenme...

Estoy utilizando NetBeans 6.1

Gracias
  #2 (permalink)  
Antiguo 11/06/2009, 21:40
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: Manipular Sockets con Swing (GUI) HEEEEEEELP!

Hola:

Que yo sepa, sockets y swing no tienen nada que ver. Simplemente un pequeño detalle que quizás sea lo que te está pasando. En Swing, cuando muestras una ventana modal, el código se queda parado hasta que se cierra la ventana. Si estás haciendo algo como esto

Código:
bucle
   recibir mensaje de socket
   mostrarlo en ventana modal
fin bucle
hasta que no cierres la ventana, no recibirás el mensaje. Suele ser buena idea crear un hilo aparte sólo para recibir los mensajes del socket y cuando tengas que mostrar el contenido del mensaje en una ventana, llamar a SwingUtilites.invokeLater(), que cambia al hilo de refresco de ventanas

Código:
Thread hiloAtenderSocket = new Thread () {
   public void run() {
        bucle {
             mensaje = leer mensaje de socket;
             SwingUtilites.invokeLater ( new Runnable () {
                 public void run () {
                    ventana mostar mensaje
                 }
             }
       }
   }
}
hiloAtenderSocket.start();
Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 12/06/2009, 07:46
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: Manipular Sockets con Swing (GUI) HEEEEEEELP!

tengo un nuevo problema.

Código:
jButton1.setEnabled(false);
    ServerSocket miServer = null;
    try {
        miServer = con.Conectar();
    } catch (IOException ex) {
        jTextArea1.setText("Fallo al enlazar");
    }
    try {
        
        Socket cliente = con.Esperar(miServer);
        if(cliente.isConnected()){
            jTextArea1.setText("Conectado al Cliente");
        }
    } catch (IOException ex) {
        jTextArea1.setText("Fallo al enlazar");
    }
Ese código lo uso en un jButton. Pero tengo el siguiente problema, si no recive ninguna conexion la GUI se queda pegada esperando por dicha conexión del cliente, y la unica forma de cerrarla es por la fuerza.

Como hago para que la GUI se quede esperando por el cliente pero que me deje cerrarla normalmente (dando click en la "x") si ya no quiero esperar?
  #4 (permalink)  
Antiguo 12/06/2009, 07:57
 
Fecha de Ingreso: enero-2008
Mensajes: 614
Antigüedad: 16 años, 4 meses
Puntos: 57
Respuesta: Manipular Sockets con Swing (GUI) HEEEEEEELP!

Generalmente las funciones para leer del socket, se bloquean hasta que hay datos que leer. Revisa la referencia de las APIs de java.

Cita:
...
This method blocks until input data is available, the end of the stream is detected, or an exception is thrown.
...
Tendrias que crear un hilo para que sea el que este leyendo. Si se bloquea no importaria ya que se estaria ejecutando aparte de la aplicacion principal. Cuando el hilo reciba datos, podrias cambiar alguna variable o mandar llamar una funcion de la aplicacion principal para que procese los datos recibidos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:27.