Jump to content
Daminh_a

Erro ao comunicar com o servidor - "cannot be resolved"

Recommended Posts

Daminh_a

Boa tarde!

Estou a implementar uma classe cliente para comunicar com o servidor em java mas já me a dar o seguinte erro em jtfNick,jtaMensagens,jffPorto,jtfEndereco, "cannot be resolved" alguém consegue me ajudar por favor a corrigir o erro?

aqui vai o codigo.

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import javax.swing.JOptionPane;

public class ClientChat extends javax.swing.JFrame {

//Socket usado para a ligação
private Socket socket;
//Streams de leitura e escrita. A de leitura é usada para receber os dados do
//servidor, enviados pelos outros clientes. A de escrita para enviar os dados
//para o servidor.
private DataInputStream din;
private DataOutputStream dout;
//apenas para que o utilizador não altere o ip a meio da conversa
public String nick;

public ClientChat() {
initComponents();
}

public void ligar() {
try {
nick = jtfNick.getText().trim();
jtaMensagens.append("<-cliente->: A ligar...n");
String host = jtfEndereco.getText().trim();
int port = Integer.parseInt(jffPorto.getText().trim());

//criar o socket
socket = new Socket(host, port);
//como não ocorreu uma excepção temos um socket aberto
jtaMensagens.append("<-cliente->: Ligação estabelecida...n");

//Vamos obter as streams de comunicação fornecidas pelo socket
din = new DataInputStream(socket.getInputStream());
dout = new DataOutputStream(socket.getOutputStream());

//e iniciar a thread que vai estar constantemente à espera de novas
//mensages. Se não usassemos uma thread, não conseguiamos receber
//mensagens enquanto estivessemos a escrever e toda a parte gráfica
//ficaria bloqueada.
new Thread(new Runnable() {
//estamos a usar uma classe anónima...

public void run() {
try {
while (true) {
//sequencialmente, ler as mensagens uma a uma e acrescentar ao
//texto que já recebemos
//para o utilizador ver
jtaMensagens.append(din.readUTF() + "n");
}
} catch (IOException ex) {
jtaMensagens.append("<-cliente->: " + ex.getMessage());
}
}
}).start();

} catch (IOException ex) {
jtaMensagens.append("<-cliente->: " + ex.getMessage());
}
}

private void initComponents() {
//codigo omitido...
}

private void jtfMensagemActionPerformed(java.awt.event.ActionEvent evt) {
try {
//enviar a mensagem para o servidor.
//anexamos o nickname deste utilizador apenas para identificação
dout.writeUTF("<" + nick + ">: " + jtfMensagem.getText().trim());
jtfMensagem.setText("");
} catch (IOException ex) {
jtaMensagens.append("<-cliente->: " + ex.getMessage());
}
}

private void jbtnLigarActionPerformed(java.awt.event.ActionEvent evt) {
if (jtfNick.getText().trim().isEmpty()) {
JOptionPane.showMessageDialog(this, "Nick não pode ser vazio.", "Nick vazio...", JOptionPane.ERROR_MESSAGE);
return;
}

if (jtfEndereco.getText().trim().isEmpty()) {
jtfEndereco.setText("localhost");
}
if (jffPorto.getText().trim().isEmpty()) {
jffPorto.setText("5000");
}

ligar();
}

private void formWindowClosing(java.awt.event.WindowEvent evt) {
if (socket != null) {
try {
socket.close();
} catch (IOException ex) {
System.out.println(ex.getMessage());
}
}
}

public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {

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

Edited by thoga31
Formatação tópico + GeSHi + título

Share this post


Link to post
Share on other sites
Ernest

Bom dia,

O problema não é a comunicação mas SWING que deve ser completado : ver o comentario certamente do professor //codigo omitido...

Minha UI não é muito bonita, mas aqui està o codigo a funcionar !

( Este editor BBCode não é muito pratico não vi como fazer syntax highlight e indentation do codigo ?

Por que não usar este http://jforum.net/ Open Source e gratuito ! )

import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;

public class ClientChat extends javax.swing.JFrame {

   /**
   * serialVersionUID
   */
   private static final long serialVersionUID = 1L;

   //Socket usado para a ligação
   private Socket socket;
   //Streams de leitura e escrita. A de leitura é usada para receber os dados do
   //servidor, enviados pelos outros clientes. A de escrita para enviar os dados
   //para o servidor.
   private DataInputStream din;
   private DataOutputStream dout;
   //apenas para que o utilizador não altere o ip a meio da conversa
   public String nick;

   //////////////////////////////////// modeficado por Ernest Duarte

   // Declaração dos componentes SWING

   JTextField jtfNick ;
   JTextField jtfEndereco;
   JTextField jffPorto;
   JButton jbtnLigar;

   JTextField jtfMensagem;
   JTextArea jtaMensagens;
   JButton enviarMessagem;

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



   public ClientChat() {
       super("Chat Client"); // nome da JFrame
       initComponents();
   }

   private void initComponents() {
       //codigo omitido...

       ////////////////////////////////////modeficado por Ernest Duarte

       this.addWindowListener(new WindowAdapter() {
           public void windowClosing(WindowEvent evt) {
               System.out.println("Window Closing Event");
               formWindowClosing(evt);
           }
       });

       // Connecção ao servidor
       jtfNick = new JTextField();
       jtfEndereco = new JTextField();
       jffPorto = new JTextField();

       jbtnLigar = new JButton("Ligar");
       jbtnLigar.addActionListener(new ActionListener() {

           @Override
           public void actionPerformed(ActionEvent evt) {
               jbtnLigarActionPerformed(evt);
           }
       });

       //--------- Enviar massgens

       jtaMensagens = new JTextArea();
       jtfMensagem = new JTextField();

       enviarMessagem = new JButton("Enviar Massagem");
       enviarMessagem.addActionListener(new ActionListener() {

           @Override
           public void actionPerformed(ActionEvent evt) {
               jtfMensagemActionPerformed(evt);
           }
       });


       // Meter os componentes no JPanel

       JPanel panel1 = new JPanel();
       panel1.setLayout(new GridLayout(4, 2));
       JLabel nickName = new JLabel("NickName :");
       JLabel endereco = new JLabel("Endereco :");
       JLabel porto = new JLabel("Porto:");

       panel1.add(nickName);
       panel1.add(jtfNick);
       panel1.add(endereco);
       panel1.add(jtfEndereco);
       panel1.add(porto);
       panel1.add(jffPorto);
       panel1.add(new JLabel());
       panel1.add(jbtnLigar);

       JPanel panel2 = new JPanel();
       panel2.setLayout(new GridLayout(2, 2));
       JLabel mensagem = new JLabel("Mensagem :");
       JLabel Mensagens = new JLabel("Mensagens :");
       panel2.add(mensagem);
       panel2.add(jtfMensagem);
       panel2.add(new JLabel());
       panel2.add(enviarMessagem);

       JPanel panel3 = new JPanel();
       panel3.setLayout(new GridLayout(2, 1));
       panel3.add(Mensagens);
       panel3.add(jtaMensagens);

       getContentPane().setLayout(new BorderLayout());
       getContentPane().add(panel1, "North");
       getContentPane().add(panel2, "Center");
       getContentPane().add(panel3, "South");

       this.setBounds(100, 100, 400, 500);

       /////////////////////////////////////////////////////////////////
   }



   public void ligar()
   {
       try {
           nick = jtfNick.getText().trim();
           jtaMensagens.append("<-cliente->: A ligar...n");
           String host = jtfEndereco.getText().trim();
           int port = Integer.parseInt(jffPorto.getText().trim());

           //criar o socket
           socket = new Socket(host, port);
           //como não ocorreu uma excepção temos um socket aberto
           jtaMensagens.append("<-cliente->: Ligação estabelecida...n");

           //Vamos obter as streams de comunicação fornecidas pelo socket
           din = new DataInputStream(socket.getInputStream());
           dout = new DataOutputStream(socket.getOutputStream());

           //e iniciar a thread que vai estar constantemente à espera de novas
           //mensages. Se não usassemos uma thread, não conseguiamos receber
           //mensagens enquanto estivessemos a escrever e toda a parte gráfica
           //ficaria bloqueada.
           new Thread(new Runnable() {
               //estamos a usar uma classe anónima...

               public void run() {
                   try {
                       while (true) {
                           //sequencialmente, ler as mensagens uma a uma e acrescentar ao
                           //texto que já recebemos
                           //para o utilizador ver
                           jtaMensagens.append(din.readUTF() + "n");
                       }
                       } catch (IOException ex) {
                       jtaMensagens.append("<-cliente->: " + ex.getMessage());
                   }
               }
           }).start();

           } catch (IOException ex) {
           jtaMensagens.append("<-cliente->: " + ex.getMessage());
       }
   }


   private void jtfMensagemActionPerformed(java.awt.event.ActionEvent evt) {
       try {
           //enviar a mensagem para o servidor.
           //anexamos o nickname deste utilizador apenas para identificação
           dout.writeUTF("<" + nick + ">: " + jtfMensagem.getText().trim());
           jtfMensagem.setText("");
           } catch (IOException ex) {
           jtaMensagens.append("<-cliente->: " + ex.getMessage());
       }
   }

   private void jbtnLigarActionPerformed(java.awt.event.ActionEvent evt) {
       if (jtfNick.getText().trim().isEmpty()) {
           JOptionPane.showMessageDialog(this, "Nick não pode ser vazio.", "Nick vazio...", JOptionPane.ERROR_MESSAGE);
           return;
       }

       if (jtfEndereco.getText().trim().isEmpty()) {
           jtfEndereco.setText("localhost");
       }
       if (jffPorto.getText().trim().isEmpty()) {
           jffPorto.setText("5000");
       }

       ligar();
   }

   private void formWindowClosing(java.awt.event.WindowEvent evt) {
       if (socket != null) {
           try {
               socket.close();
               } catch (IOException ex) {
               System.out.println(ex.getMessage());
           }
       }
   }


   // SwingUtilities : http://docs.oracle.com/javase/tutorial/uiswing/concurrency/initial.html
   public static void main(String args[]) {
       SwingUtilities.invokeLater(new Runnable() {

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

Edited by Rui Carlos

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.