Erro ao Chamar Frame [RESOLVIDO]

Pessoal, tenho um Client e um Server, de tipo um msn…

Client:

[code]public class Client extends JFrame {

////////////////////////////////////////////////////////////////////////////
private static Client instance = new Client(“127.0.0.1”);
////////////////////////////////////////////////////////////////////////////

public JTextField enterField;
public JTextArea displayArea;
public ObjectOutputStream output;
public ObjectInputStream input;
public String message = "";
public String chatServer;
public Socket client;

//inicializa chatServer e configura a GUI
    private Client(String host) { ///////////////////////aki vai pra public
        super("Cliente (ENVIA MENSAGEM)");

        chatServer = host;
        enterField = new JTextField();
        enterField.setEditable(false);

   
        enterField.addActionListener(
                    new ActionListener() {

                         //envia a mensagem ao servidor
                         public void actionPerformed (ActionEvent event)
                         {
                            sendData(event.getActionCommand());
                            enterField.setText("");
                         }
                     }
                );

                add(enterField, BorderLayout.NORTH);

                displayArea = new JTextArea();
                add(new JScrollPane(displayArea), BorderLayout.CENTER);

                setSize(300,150);
                setVisible(true);
    }

    /////////////////////////////////////////////////////////
    public static Client getInstance() {
      //  instance.runClient();
     return instance;
  }

/////////////////////////////////////////////////////////
//conecta-se ao servidor e processa as mensagens a partir do servidor
public void runClient()
{
try //conecta-se ao servidor,obtém fluxos, processa a conexão
{

            connectToServer();
            getStreams();
            processConnection();
        }

            catch (EOFException eofException)
            {
                displayMessage("\nConexão Terminada");
            }

        catch(IOException ioException) {
            ioException.printStackTrace();
        }

        finally
        {
                closeConnection();
        }
        }

    //conecta-se ao servidor
        public void connectToServer() throws IOException {
            displayMessage("Conectando\n");

            client = new Socket(InetAddress.getByName(chatServer), 12345);

            displayMessage("\Conectado a: " + client.getInetAddress().getHostName());
        }

        //obtém fluxos para enviar e receber dados
            public void getStreams() throws IOException
            {
                output = new ObjectOutputStream(client.getOutputStream());
                output.flush();

                input = new ObjectInputStream(client.getInputStream());
            }

            //processa a conexão com o servidor
                public void processConnection() throws IOException {
                    setTextFieldEditable(true);

                    do //processa as mensagens enviadas do servidor
                    {
                        try //le e exibe a mensagem
                        {
                            message = (String) input.readObject();
                            displayMessage("\n+ message");
                        }

                        catch (ClassNotFoundException classNotFoundException)
                        {
                            displayMessage("\nUnknown objetct type received");
                        }
                    } while (!message.equals("SERVER>>> TERMINATE"));
                }

                //fecha os fluxos e o socket
                    public void closeConnection() {
                        displayMessage("\nClosing connection");
                        setTextFieldEditable(false);

                        try {
                            output.close();
                            input.close();
                            client.close();
                        }
                        catch (IOException ioException) {
                            ioException.printStackTrace();
                        }
                    }

                    //envia mensagem ao servidor
                        public void sendData(String message) {

                            try //envia o objeto ao servidor
                            {
                                output.writeObject("MESA 01 >>" +message);
                                output.flush();
                                displayMessage("MESA 01 >>" +message);
                       
                            }

                            catch (IOException ioException) {
                                displayArea.append("\nError writing object");
                            }
                        }

                        //manipula a displayArea na thread de despacho de eventos
                            public void displayMessage(final String messageToDisplay) {
                                SwingUtilities.invokeLater(

                                        new Runnable() {
                                            public void run()
                                            {
                                                displayArea.append(messageToDisplay);
                                                }
                                }
                                        );
                            }


                            //manipula o enterField na thread de despacho de eventos
                                public void setTextFieldEditable(final boolean editable)
                                {
                                    SwingUtilities.invokeLater(
                                            new Runnable() {
                                            public void run()
                                            {
                                                enterField.setEditable(editable);
                                            }
                                    }
                                            );

                                }

/////////////////////////////////////////////////////////////////// /*
public static void main (String args[]) {
getInstance().runClient();
}

///////////////////////////////////////////////////////////////////

}[/code]

Ele roda certinho…
Agora eu quero chamar o Client quando eu clicar num botão de outro frame…
Coloquei isso:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Client.getInstance().runClient(); }
Mas não dá certo…
Algo me diz que é porque o client é frame também… não sei…
O que posso fazer?

Na verdade, é porque você está usando o padrão Singleton. Então, todo “instance” que você retorna no getInstance() refere-se ao mesmo client.

Eu tentei colocar o client public, e tirar o getInstance()…
Ae no client eu colokei isso no main:

public static void main (String args[]) { Client k = new Client("127.0.0.1"); k.runClient(); }
E em vez de mandar o runclient no botão, chamei o main…
Mas dá na mesma, roda o client, mas fica “transparente” (tipo quando uma janela fica não respondendo), e não aparece as coisas que tem dentro…
O chato é que quando mando rodar o Client da certo, não dá é pra chamar ele no botão…

Ahhhh…
Muito estranho isso
;X

Alguém que saca isso, se quiser o código adiciona eu no msn que eu passo o projeto pra vocês verem se acham o erro…
pepe-mama@hotmail.com

Desde já agradeço…

O estranho, é que quando eu mando rodar o Client, ele roda certinho… E o main dele é isso:

public static void main (String args[]) { getInstance().runClient(); }

Agora quando eu vou rodar pelo clique de um botão:

private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { Client.getInstance().runClient(); }

Não dá certo…
Já tentei de tudo…

Deletei o programa e fiz outro.
Portanto… [RESOLVIDO]

hehehehe… desculpe não ter respondido, mas esse programa aí tava meio bagunçado mesmo. Eu quase te sugeri isso. :slight_smile:

Mas é assim que aprende. :wink:

Hehe…
Só para constar: eu utilizei o programa que você postou em outro tópico, quando alguém tava com a mesma dúvida que eu… rs
Mas vlw ae… Agora ta funcionando :smiley: