• Viernes 8 de Noviembre de 2024, 20:10

Autor Tema:  Problema con mini chat !!!!!  (Leído 1233 veces)

tuxwars

  • Nuevo Miembro
  • *
  • Mensajes: 1
    • Ver Perfil
Problema con mini chat !!!!!
« en: Lunes 28 de Marzo de 2011, 02:48 »
0
Hola compañeros programadores, fijense que tengo un problema con un programa que me dejaron, es un mini chat usando socket este es una sola interfaz donde puedes ser cliente o servidor y de ahi se mandan mensajes, el problema es que al momento de darle al boton conectar del mini chat, este se atora, ya sea creando un servidor o un cliente.

Me base en el minichat que esta en el blog de casidiablo, lo curioso es que si uso su interfaz y me conecto con el mio, este se traba pero al cerrar aquel se destraba y salen todos los mensajes.

Es algo desesperante porque ya intente buscar cual es el problema pero no lo encuentro

Les dejo mi codigo y es de casi diablo espero me ayuden!!!!
El mio y recuerden poner en el no_puerto 12345:
Código: Java
  1.  
  2. /**
  3.  * @(#)mini_chat.java
  4.  *
  5.  *
  6.  * @author tuxwars
  7.  * @version 1.00 2011/3/24
  8.  */
  9. import javax.swing.*;//no olvidemos importar las librerias
  10. import java.awt.event.*;
  11. import java.awt.*;
  12. import javax.swing.event.*;
  13. import java.net.*;  //Biblioteca para utilizar ServidorSocket
  14. import java.io.*;
  15.  
  16. public class mini_chat extends JFrame implements ChangeListener {
  17.        
  18.     /**
  19.      * Creates a new instance of <code>mini_chat</code>.
  20.      */
  21.     private JLabel Nom_ip,Num;
  22.     private JTextField n_ip,num_pu,mensaje;
  23.     private JRadioButton Cliente,Servidor;
  24.     private ButtonGroup grupo;
  25.     private JButton boton1,boton2;
  26.     private int contador = 1;
  27.     private ObjectOutputStream salida;
  28.     private ObjectInputStream entrada;
  29.     private ServerSocket servidor;
  30.     private Socket conexion;
  31.     private JTextArea area;
  32.     private int temp=1;
  33.     private int ban=0;
  34.     private String servidorChat;
  35.     private Socket cliente;
  36.     private static int ClientePuerto;
  37.     private  static int ServidorPuerto;
  38.    
  39.    
  40.     public mini_chat() {
  41.     //hacemos el frame donde colocaremos el textarea
  42.         setSize(500,300);
  43.         setTitle("Mini Chat MSN V. 1.3 Alpha");
  44.         setLocation(100,100);
  45.         setVisible(true);
  46.         setLayout(null);
  47.         setDefaultCloseOperation(3);
  48.         //------------------------------------------------------
  49.  
  50.  
  51.        
  52.         area = new JTextArea();
  53.         add(area);
  54.         area.setBounds(250,30,220,200);
  55.        
  56.         /*---------------------------------------------------------*
  57.         |   hacemos un JScrollPane para poner el textarea en        |
  58.         |   el y asi si el texto es muy grande podremos mover el    |
  59.         |   el area visible y asi poder leer todo el texto          |
  60.         *---------------------------------------------------------*/
  61.        
  62.         JScrollPane ajustar = new JScrollPane(area);
  63.         add(ajustar);
  64.         ajustar.setBounds(250,30,220,200);
  65.        
  66.         Nom_ip = new JLabel("Nombre o IP: ");//hacemos el label
  67.         add(Nom_ip);//lo agregamos el frame
  68.         Nom_ip.setBounds(10,10,100,25);//colocamos las coordenadas
  69.        
  70.         //(pos X, pos Y, ancho, alto)
  71.        
  72.         n_ip = new JTextField(30);
  73.         add(n_ip);
  74.         n_ip.setBounds(90,10,150,30);
  75.        
  76.         Nom_ip.setVisible(false);
  77.         n_ip.setVisible(false);
  78.        
  79.         Num = new JLabel("No de puerto: ");//hacemos el label
  80.         add(Num);//lo agregamos el frame
  81.         Num.setBounds(10,40,130,40);//colocamos las coordenadas
  82.         //(pos X, pos Y, ancho, alto)  
  83.        
  84.         num_pu = new JTextField(30);
  85.         add(num_pu);
  86.         num_pu.setBounds(90,50,150,30);  
  87.            
  88.         Servidor=new JRadioButton("Servidor",true);
  89.         Cliente=new JRadioButton("Cliente",false);
  90.         grupo=new ButtonGroup();
  91.         add(Servidor);
  92.         Servidor.setBounds(10,110,100,40);
  93.         Servidor.addChangeListener(this);
  94.    
  95.         add(Cliente);
  96.         Cliente.setBounds(120,110,100,40);
  97.         Cliente.addChangeListener(this);
  98.         grupo.add( Servidor );
  99.         grupo.add( Cliente );
  100.        
  101.         boton1 = new JButton("Conectar");//hacemos el boton
  102.         add(boton1);//lo agremos al frame
  103.         boton1.setBounds(10,200,100,40);//colocamos las coordenadas
  104.         //(pos X, pos Y, ancho, alto)
  105.        
  106.         boton2 = new JButton("Desconectar");//hacemos el boton
  107.         add(boton2);//lo agremos al frame
  108.         boton2.setBounds(130,200,110,40);//colocamos las coordenadas
  109.         //(pos X, pos Y, ancho, alto)
  110.        
  111.         mensaje = new JTextField(80);
  112.         mensaje.setEditable(false);
  113.         add(mensaje);
  114.         mensaje.setBounds(250,230,220,25);
  115.         mensaje.addActionListener(
  116.          new ActionListener() {
  117.  
  118.             // enviar mensaje al servidor
  119.             public void actionPerformed( ActionEvent evento )
  120.             {
  121.                enviarDatos( evento.getActionCommand() );
  122.                mensaje.setText( "" );
  123.             }
  124.          }  
  125.       );    
  126.            
  127.         boton2.addActionListener(new ActionListener(){
  128.         public void actionPerformed(ActionEvent e){
  129.             //aqui pones el codigo que quieras que se ejecute
  130.             //al dar click al boton
  131.             //ClienteSocket.close();
  132.             if(ban==1){
  133.                 cerrarConexion();   // Paso 5: cerrar la conexión.
  134.             }else{
  135.                 mostrarMensaje( "Cree una conexion antesn" );  
  136.             }
  137.             ban=0;
  138.         }});
  139.    
  140.     }
  141.    
  142.             public void stateChanged(ChangeEvent e) {
  143.             if (Cliente.isSelected()) {
  144.                 Nom_ip.setVisible(true);
  145.                 n_ip.setVisible(true);
  146.                 boton1.addActionListener(new ActionListener(){
  147.                 public void actionPerformed(ActionEvent e){
  148.                     SwingUtilities.invokeLater(
  149.                         new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  150.  
  151.                             public void run() // actualiza areaPantalla
  152.                             {
  153.                                  //aqui pones el codigo que quieras que se ejecute
  154.                                 //al dar click al boton
  155.                                 //System.out.println("Hola");
  156.                                 ban=1;
  157.  
  158.                                 ejecutarCliente();
  159.                             }
  160.                         }
  161.                     );  
  162.                 }
  163.             });                
  164.                 temp=0;
  165.             }
  166.             if (Servidor.isSelected()) {
  167.                 Nom_ip.setVisible(false);
  168.                 n_ip.setVisible(false);
  169.                 boton1.addActionListener(new ActionListener(){
  170.                 public void actionPerformed(ActionEvent e){
  171.                     SwingUtilities.invokeLater(
  172.                         new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  173.  
  174.                             public void run() // actualiza areaPantalla
  175.                             {
  176.                                  //aqui pones el codigo que quieras que se ejecute
  177.                                 //al dar click al boton
  178.                                 //System.out.println("Hola");
  179.                                 ban=1;
  180.  
  181.                                 ejecutarServidor();
  182.                             }
  183.                         }
  184.                     );  
  185.                 }
  186.             });
  187.                 temp=1;
  188.             }
  189.        
  190.         }
  191.        
  192.      // configurar y ejecutar el servidor
  193.    public void ejecutarServidor()
  194.    {
  195.       // configurar servidor para que reciba conexiones; procesar las conexiones
  196.       try {
  197.  
  198.          // Paso 1: crear un objeto ServerSocket.
  199.        
  200.          ServidorPuerto=Integer.parseInt(num_pu.getText());
  201.          servidor = new ServerSocket( ServidorPuerto );
  202.  
  203.          for(;;) {
  204.  
  205.             try {
  206.                esperarConexion(); // Paso 2: esperar una conexión.
  207.                obtenerFlujos();        // Paso 3: obtener flujos de entrada y salida.
  208.                procesarConexion(); // Paso 4: procesar la conexión.
  209.             }
  210.  
  211.             // procesar excepción EOFException cuando el cliente cierre la conexión
  212.             catch ( EOFException excepcionEOF ) {
  213.                System.err.println( "El servidor terminó la conexión" );
  214.             }
  215.  
  216.          } // fin de instrucción while
  217.  
  218.       } // fin del bloque try
  219.  
  220.       // procesar problemas con E/S
  221.       catch ( IOException excepcionES ) {
  222.          excepcionES.printStackTrace();
  223.       }
  224.  
  225.    } // fin del método ejecutarServidor
  226.    // conectarse al servidor y procesar mensajes del servidor
  227.    private void ejecutarCliente()
  228.    {
  229.       // conectarse al servidor, obtener flujos, procesar la conexión
  230.       try {
  231.          conectarAServidor(); // Paso 1: crear un socket para realizar la conexión
  232.          obtenerFlujos();      // Paso 2: obtener los flujos de entrada y salida
  233.          procesarConexion(); // Paso 3: procesar la conexión
  234.       }
  235.  
  236.       // el servidor cerró la conexión
  237.       catch ( EOFException excepcionEOF ) {
  238.          System.err.println( "El cliente termino la conexión" );
  239.       }
  240.  
  241.       // procesar los problemas que pueden ocurrir al comunicarse con el servidor
  242.       catch ( IOException excepcionES ) {
  243.          excepcionES.printStackTrace();
  244.       }
  245.  
  246.  
  247.    } // fin del método ejecutarCliente
  248.  
  249.    // conectarse al servidor
  250.    private void conectarAServidor() throws IOException
  251.    {      
  252.       mostrarMensaje( "Intentando realizar conexiónn" );
  253.       servidorChat = n_ip.getText(); // establecer el servidor al que se va a conectar este cliente
  254.       // crear Socket para realizar la conexión con el servidor
  255.       ClientePuerto=Integer.parseInt(num_pu.getText());
  256.       cliente = new Socket( InetAddress.getByName( servidorChat ), ClientePuerto );
  257.  
  258.       // mostrar la información de la conexión
  259.       mostrarMensaje( "Conectado a: " +
  260.          cliente.getInetAddress().getHostName() );
  261.    }
  262.  
  263.    // esperar que la conexión llegue, después mostrar información de la conexión
  264.    private void esperarConexion() throws IOException
  265.    {
  266.       mostrarMensaje( "Esperando una conexiónn" );
  267.       conexion = servidor.accept(); // permitir al servidor aceptar la conexión            
  268.       mostrarMensaje( "Conexión " + contador + " recibida de: " +
  269.          conexion.getInetAddress().getHostName() );
  270.    }
  271.  
  272.    // obtener flujos para enviar y recibir datos
  273.    private void obtenerFlujos() throws IOException
  274.    {
  275.       if(temp==1){
  276.         // establecer flujo de salida para los objetos
  277.         salida = new ObjectOutputStream( conexion.getOutputStream() );
  278.         salida.flush(); // vaciar búfer de salida para enviar información de encabezado
  279.  
  280.         // establecer flujo de entrada para los objetos
  281.         entrada = new ObjectInputStream( conexion.getInputStream() );
  282.  
  283.         mostrarMensaje( "nSe recibieron los flujos de E/Sn" );
  284.       }if(temp==0){
  285.          // establecer flujo de salida para los objetos
  286.         salida = new ObjectOutputStream( cliente.getOutputStream() );      
  287.         salida.flush(); // vacíar búfer de salida para enviar información de encabezado
  288.  
  289.         // establecer flujo de entrada para los objetos
  290.         entrada = new ObjectInputStream( cliente.getInputStream() );
  291.  
  292.         mostrarMensaje( "nSe recibieron los flujos de E/Sn" );        
  293.       }
  294.    }
  295.    // procesar la conexión con el cliente
  296.    private void procesarConexion() throws IOException
  297.    {
  298.       if(temp==1){
  299.         // enviar mensaje de conexión exitosa al cliente
  300.         String mensaje = "Conexión exitosa";
  301.         enviarDatos( mensaje );
  302.  
  303.         // habilitar campoIntroducir para que el usuario del servidor pueda enviar mensajes
  304.         establecerCampoTextoEditable( true );
  305.  
  306.         do { // procesar los mensajes enviados por el cliente
  307.  
  308.             // leer el mensaje y mostrarlo en pantalla
  309.             try {
  310.                 mensaje = ( String ) entrada.readObject();
  311.                 mostrarMensaje( "n" + mensaje );
  312.             }
  313.  
  314.             // atrapar problemas que pueden ocurrir al tratar de leer del cliente
  315.             catch ( ClassNotFoundException excepcionClaseNoEncontrada ) {
  316.                 mostrarMensaje( "nSe recibió un tipo de objeto desconocido" );
  317.             }
  318.  
  319.         } while ( !mensaje.equals( "CLIENTE>>> TERMINAR" ) );
  320.       }if(temp==0){
  321.         // habilitar campoIntroducir para que el usuario del cliente pueda enviar mensajes
  322.         String mensaje = "Conexión exitosa";
  323.         enviarDatos( mensaje );
  324.        
  325.         establecerCampoTextoEditable( true );
  326.  
  327.         do { // procesar mensajes enviados del servidor
  328.  
  329.             // leer mensaje y mostrarlo en pantalla
  330.             try {
  331.                 mensaje = ( String ) entrada.readObject();
  332.                 mostrarMensaje( "n" + mensaje );
  333.             }
  334.  
  335.             // atrapar los problemas que pueden ocurrir al leer del servidor
  336.             catch ( ClassNotFoundException excepcionClaseNoEncontrada ) {
  337.                 mostrarMensaje( "nSe recibió un objeto de tipo desconocido" );
  338.             }
  339.  
  340.         } while ( !mensaje.equals( "SERVIDOR>>> TERMINAR" ) );  
  341.       }
  342.  
  343.    } // fin del método procesarConexion
  344.  
  345.    // cerrar flujos y socket
  346.    private void cerrarConexion()
  347.    {
  348.       mostrarMensaje( "nFinalizando la conexiónn" );
  349.       establecerCampoTextoEditable( false ); // deshabilitar campoIntroducir
  350.  
  351.       try {
  352.          salida.close();
  353.          entrada.close();
  354.          conexion.close();
  355.          cliente.close();
  356.       }
  357.       catch( IOException excepcionES ) {
  358.          excepcionES.printStackTrace();
  359.       }
  360.    }
  361.  
  362.    // enviar mensaje al cliente
  363.    private void enviarDatos( String mensaje )
  364.    {
  365.       // enviar objeto al cliente
  366.       try {
  367.         if(temp==1){
  368.          salida.writeObject( "SERVIDOR>>> " + mensaje );
  369.          salida.flush();
  370.          mostrarMensaje( "nSERVIDOR>>> " + mensaje );
  371.         }else if(temp==0){
  372.          salida.writeObject( "CLIENTE>>> " + mensaje );
  373.          salida.flush();
  374.          mostrarMensaje( "nCLIENTE>>> " + mensaje );
  375.         }
  376.       }
  377.  
  378.       // procesar problemas que pueden ocurrir al enviar el objeto
  379.       catch ( IOException excepcionES ) {
  380.          area.append( "nError al escribir objeto" );
  381.       }
  382.    }
  383.  
  384.    // método utilitario que es llamado desde otros subprocesos para manipular a
  385.    // areaPantalla en el subproceso despachador de eventos
  386.    private void mostrarMensaje( final String mensajeAMostrar )
  387.    {
  388.       // mostrar mensaje del subproceso de ejecución despachador de eventos
  389.       SwingUtilities.invokeLater(
  390.          new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  391.  
  392.             public void run() // actualiza areaPantalla
  393.             {
  394.                area.append( mensajeAMostrar );
  395.                area.setCaretPosition(
  396.                   area.getText().length() );
  397.             }
  398.  
  399.          }  // fin de la clase interna
  400.  
  401.       ); // fin de la llamada a SwingUtilities.invokeLater
  402.    }
  403.  
  404.    // método utilitario que es llamado desde otros subprocesos para manipular a
  405.    // campoIntroducir en el subproceso despachador de eventos
  406.    private void establecerCampoTextoEditable( final boolean editable )
  407.    {
  408.       // mostrar mensaje del subproceso de ejecución despachador de eventos
  409.       SwingUtilities.invokeLater(
  410.          new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  411.  
  412.             public void run()  // establece la capacidad de modificar a campoIntroducir
  413.             {
  414.                mensaje.setEditable( editable );
  415.             }
  416.  
  417.          }  // fin de la clase interna
  418.  
  419.       ); // fin de la llamada a SwingUtilities.invokeLater
  420.    }
  421.    
  422.    
  423.    
  424.     /**
  425.      * @param args the command line arguments
  426.      */
  427.     public static void main(String[] args) {
  428.         // TODO code application logic here
  429.         mini_chat mn = new mini_chat();
  430.     }
  431. }
  432.  
  433.  

El de casi Diablo Cliente
Código: Java
  1.  
  2. // Cliente que lee y muestra la información que le envía un Servidor.
  3. import java.io.*;
  4. import java.net.*;
  5. import java.awt.*;
  6. import java.awt.event.*;
  7. import javax.swing.*;
  8.  
  9. public class Cliente extends JFrame {
  10.    private JTextField campoIntroducir;
  11.    private JTextArea areaPantalla;
  12.    private ObjectOutputStream salida;
  13.    private ObjectInputStream entrada;
  14.    private String mensaje = "";
  15.    private String servidorChat;
  16.    private Socket cliente;
  17.  
  18.    // inicializar servidorChat y configurar GUI
  19.    public Cliente( String host )
  20.    {
  21.       super( "Cliente" );
  22.  
  23.       servidorChat = host; // establecer el servidor al que se va a conectar este cliente
  24.  
  25.       Container contenedor = getContentPane();
  26.  
  27.       // crear campoIntroducir y registrar componente de escucha
  28.       campoIntroducir = new JTextField();
  29.       campoIntroducir.setEditable( false );
  30.       campoIntroducir.addActionListener(
  31.          new ActionListener() {
  32.  
  33.             // enviar mensaje al servidor
  34.             public void actionPerformed( ActionEvent evento )
  35.             {
  36.                enviarDatos( evento.getActionCommand() );
  37.                campoIntroducir.setText( "" );
  38.             }
  39.          }  
  40.       );
  41.  
  42.       contenedor.add( campoIntroducir, BorderLayout.NORTH );
  43.  
  44.       // crear areaPantalla
  45.       areaPantalla = new JTextArea();
  46.       contenedor.add( new JScrollPane( areaPantalla ),
  47.          BorderLayout.CENTER );
  48.  
  49.       setSize( 300, 150 );
  50.       setVisible( true );
  51.  
  52.    } // fin del constructor de Cliente
  53.  
  54.    // conectarse al servidor y procesar mensajes del servidor
  55.    private void ejecutarCliente()
  56.    {
  57.       // conectarse al servidor, obtener flujos, procesar la conexión
  58.       try {
  59.          conectarAServidor(); // Paso 1: crear un socket para realizar la conexión
  60.          obtenerFlujos();      // Paso 2: obtener los flujos de entrada y salida
  61.          procesarConexion(); // Paso 3: procesar la conexión
  62.       }
  63.  
  64.       // el servidor cerró la conexión
  65.       catch ( EOFException excepcionEOF ) {
  66.          System.err.println( "El cliente termino la conexión" );
  67.       }
  68.  
  69.       // procesar los problemas que pueden ocurrir al comunicarse con el servidor
  70.       catch ( IOException excepcionES ) {
  71.          excepcionES.printStackTrace();
  72.       }
  73.  
  74.       finally {
  75.          cerrarConexion(); // Paso 4: cerrar la conexión
  76.       }
  77.  
  78.    } // fin del método ejecutarCliente
  79.  
  80.    // conectarse al servidor
  81.    private void conectarAServidor() throws IOException
  82.    {      
  83.       mostrarMensaje( "Intentando realizar conexiónn" );
  84.  
  85.       // crear Socket para realizar la conexión con el servidor
  86.       cliente = new Socket( InetAddress.getByName( servidorChat ), 12345 );
  87.  
  88.       // mostrar la información de la conexión
  89.       mostrarMensaje( "Conectado a: " +
  90.          cliente.getInetAddress().getHostName() );
  91.    }
  92.  
  93.    // obtener flujos para enviar y recibir datos
  94.    private void obtenerFlujos() throws IOException
  95.    {
  96.       // establecer flujo de salida para los objetos
  97.       salida = new ObjectOutputStream( cliente.getOutputStream() );      
  98.       salida.flush(); // vacíar búfer de salida para enviar información de encabezado
  99.  
  100.       // establecer flujo de entrada para los objetos
  101.       entrada = new ObjectInputStream( cliente.getInputStream() );
  102.  
  103.       mostrarMensaje( "nSe recibieron los flujos de E/Sn" );
  104.    }
  105.  
  106.    // procesar la conexión con el servidor
  107.    private void procesarConexion() throws IOException
  108.    {
  109.       // habilitar campoIntroducir para que el usuario del cliente pueda enviar mensajes
  110.       establecerCampoTextoEditable( true );
  111.  
  112.       do { // procesar mensajes enviados del servidor
  113.  
  114.          // leer mensaje y mostrarlo en pantalla
  115.          try {
  116.             mensaje = ( String ) entrada.readObject();
  117.             mostrarMensaje( "n" + mensaje );
  118.          }
  119.  
  120.          // atrapar los problemas que pueden ocurrir al leer del servidor
  121.          catch ( ClassNotFoundException excepcionClaseNoEncontrada ) {
  122.             mostrarMensaje( "nSe recibió un objeto de tipo desconocido" );
  123.          }
  124.  
  125.       } while ( !mensaje.equals( "SERVIDOR>>> TERMINAR" ) );
  126.  
  127.    } // fin del método procesarConexion
  128.  
  129.    // cerrar flujos y socket
  130.    private void cerrarConexion()
  131.    {
  132.       mostrarMensaje( "nCerrando conexión" );
  133.       establecerCampoTextoEditable( false ); // deshabilitar campoIntroducir
  134.  
  135.       try {
  136.          salida.close();
  137.          entrada.close();
  138.          cliente.close();
  139.       }
  140.       catch( IOException excepcionES ) {
  141.          excepcionES.printStackTrace();
  142.       }
  143.    }
  144.  
  145.    // enviar mensaje al servidor
  146.    private void enviarDatos( String mensaje )
  147.    {
  148.       // enviar objeto al servidor
  149.       try {
  150.          salida.writeObject( "CLIENTE>>> " + mensaje );
  151.          salida.flush();
  152.          mostrarMensaje( "nCLIENTE>>> " + mensaje );
  153.       }
  154.  
  155.       // procesar los problemas que pueden ocurrir al enviar el objeto
  156.       catch ( IOException excepcionES ) {
  157.          areaPantalla.append( "nError al escribir el objeto" );
  158.       }
  159.    }
  160.  
  161.    // método utilitario que es llamado desde otros subprocesos para manipular a
  162.    // areaPantalla en el subproceso despachador de eventos
  163.    private void mostrarMensaje( final String mensajeAMostrar )
  164.    {
  165.       // mostrar mensaje del subproceso de ejecución de la GUI
  166.       SwingUtilities.invokeLater(
  167.          new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  168.  
  169.             public void run() // actualiza areaPantalla
  170.             {
  171.                areaPantalla.append( mensajeAMostrar );
  172.                areaPantalla.setCaretPosition(
  173.                   areaPantalla.getText().length() );
  174.             }
  175.  
  176.          }  // fin de la clase interna
  177.  
  178.       ); // fin de la llamada a SwingUtilities.invokeLater
  179.    }
  180.  
  181.    // método utilitario que es llamado desde otros subprocesos para manipular a
  182.    // campoIntroducir en el subproceso despachador de eventos
  183.    private void establecerCampoTextoEditable( final boolean editable )
  184.    {
  185.       // mostrar mensaje del subproceso de ejecución de la GUI
  186.       SwingUtilities.invokeLater(
  187.          new Runnable() {  // clase interna para asegurar que la GUI se actualice apropiadamente
  188.  
  189.             public void run()  // establece la capacidad de modificar campoIntroducir
  190.             {
  191.                campoIntroducir.setEditable( editable );
  192.             }
  193.  
  194.          }  // fin de la clase interna
  195.  
  196.       ); // fin de la llamada a SwingUtilities.invokeLater
  197.    }
  198.  
  199.    public static void main( String args[] )
  200.    {
  201.       Cliente aplicacion;
  202.  
  203.       if ( args.length == 0 )
  204.          aplicacion = new Cliente( "127.0.0.1" );
  205.       else
  206.          aplicacion = new Cliente( args[ 0 ] );
  207.  
  208.       aplicacion.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
  209.       aplicacion.ejecutarCliente();
  210.    }
  211.  
  212. } // fin de la clase Cliente
  213.  

Gracias Anticipadas!!!!!!!! :good: