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

el JFRAME se paraliza, problema con SOCKETS

Estas en el tema de el JFRAME se paraliza, problema con SOCKETS en el foro de Java en Foros del Web. HOOOOLA. sigo posteando cosas y más cosas. Tengo un problemón. Cuando creo un jForm, y en el utilizo SOCKETS, el jForm se paraliza. PROBLEMA 1 ...
  #1 (permalink)  
Antiguo 15/06/2009, 12:01
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
el JFRAME se paraliza, problema con SOCKETS

HOOOOLA.
sigo posteando cosas y más cosas.

Tengo un problemón.

Cuando creo un jForm, y en el utilizo SOCKETS, el jForm se paraliza.

PROBLEMA 1
pasa lo siguiente:
- Inicio el programita.
- Aparece un jForm con un boton que dice "Conectar".
- Lo que hace ese boton es enlazar un ServerSocket a un puerto.
- además, en ese botón viene la función de quedarse esperando al cliente, y es en este punto donde el jForm se queda pegado. No deja escribir ni cerrar ni nada, solo cuando recive la conexión ya vuelve a trabajar.


PROBLEMA 2.
-En la clase "Conectar" vienen las funciones con la opción de
System.out.println("");
con esto me imprime todo lo quese indica en la parte de consolo de NetBeans.
- Pero cuando trato de imprimir eso en un jTextArea o cualquiera objeto gráfico, no lo hace.






Código:
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.SwingUtilities;

public class Server extends javax.swing.JFrame {

    /** Creates new form Server */
    public Server() {
        initComponents();
    }
    conectar con = new conectar();

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jScrollPane1 = new javax.swing.JScrollPane();
        jTextArea1 = new javax.swing.JTextArea();
        jButton1 = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        jTextArea1.setColumns(20);
        jTextArea1.setRows(5);
        jScrollPane1.setViewportView(jTextArea1);

        jButton1.setText("jButton1");
        jButton1.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jButton1ActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 380, Short.MAX_VALUE)
                    .addComponent(jButton1))
                .addContainerGap())
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 215, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 30, Short.MAX_VALUE)
                .addComponent(jButton1)
                .addGap(21, 21, 21))
        );

        pack();
    }// </editor-fold>                        

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         

    conectar.Enlazar();
    conectar.esperarConexion();
    conectar.obtenerFlujos();

}                                        

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        java.awt.EventQueue.invokeLater(new Runnable() {

            public void run() {
                new Server().setVisible(true);
            }
        });
    }

    public void Imprimir(final String texto) {
        SwingUtilities.invokeLater(
                new Runnable() {
                    public void run()   
                    {
                        jTextArea1.setText(texto);
                    }
                });
    }
    // Variables declaration - do not modify                     
    private javax.swing.JButton jButton1;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JTextArea jTextArea1;
    // End of variables declaration                   
}

Código:
import java.io.BufferedReader;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 *
 * @author CARLOS DAVID MUÑOZ
 */
public class conectar {

    private static ObjectOutputStream salida;
    private static ObjectInputStream entrada;
    private static ServerSocket servidor;
    private static Socket conexion;
    private static String mensaje;
    static Server ser = new Server();
    
    public static void Enlazar(){
        try {
            servidor = new ServerSocket(12345);
            System.out.println("Enlazado al puerto");
            ser.Imprimir("Enlazado al puerto");
        } catch (IOException ex) {
            Logger.getLogger(conectar.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    public static void esperarConexion(){
        System.out.println("Esperando conexión");
        try {
            conexion = servidor.accept(); // permitir al servidor aceptar la conexión
            System.out.println("Conexión recibida de: " +
                conexion.getInetAddress().getHostName());
        } catch (IOException ex) {
            Logger.getLogger(conectar.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }
    
    public static void obtenerFlujos(){
        try {
            // establecer flujo de salida para los objetos
            salida = new ObjectOutputStream(conexion.getOutputStream());
            salida.flush(); // vaciar búfer de salida para enviar información de encabezado
            entrada = new ObjectInputStream(conexion.getInputStream());// establecer flujo de entrada para los objetos 
            System.out.println("\nSe recibieron los flujos de E/S\n");
        } catch (IOException ex) {
            Logger.getLogger(conectar.class.getName()).log(Level.SEVERE, null, ex);
        }        
    }
}
  #2 (permalink)  
Antiguo 15/06/2009, 12:27
Avatar de chuidiang
Colaborador
 
Fecha de Ingreso: octubre-2004
Mensajes: 3.774
Antigüedad: 19 años, 7 meses
Puntos: 454
Respuesta: el JFRAME se paraliza, problema con SOCKETS

Hola:

Java atiende todos los eventos de teclado y ratón en el mismo hilo que se encarga de repintar las ventanas. Si al pulsar un botón dejas el código bloqueado (estableciendo un socket y esperando recibir algo por él con un read() o un accept(), por ejemplo), se queda bloqueado el hilo que repinta las ventanas, por lo que todas las ventanas y componentes de la interface grafica dejan de funcionar.

Para evitar esto, debes al pulsar el botón, crear un nuevo hilo que se encargue del tema de la conexión y devolver el control del jButtonActionPerformed() lo antes posible.

En los enlaces tienes más detalles.

Se bueno.
__________________
Apuntes Java
Wiki de Programación
  #3 (permalink)  
Antiguo 15/06/2009, 12:44
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: el JFRAME se paraliza, problema con SOCKETS

Peeeeeeerfecto.
Revisando información.


Realmente te agradesco por la información.
--------------------------------------------------------------------------------------------------------------------


Ya revisa una parte, esta genial.
De verdad muchas gracias.

Ahorita comento si me surgió algún problema nuevo....
o si logré mi cometido...

Última edición por dacarot; 15/06/2009 a las 12:59
  #4 (permalink)  
Antiguo 15/06/2009, 14:58
 
Fecha de Ingreso: septiembre-2008
Mensajes: 91
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: el JFRAME se paraliza, problema con SOCKETS

SIIIIIIIIIIIIIIII!!!!!!

Gracias a esa Info pude hacer un chat en java!!!

como posteo esa información o donde para que quede por si alguien se encuentra con mis mismos problemas?
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 23:37.