Daminh_a Posted June 21, 2013 at 03:27 PM Report #514271 Posted June 21, 2013 at 03:27 PM (edited) 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 June 21, 2013 at 03:38 PM by thoga31 Formatação tópico + GeSHi + título
Rui Carlos Posted June 21, 2013 at 07:16 PM Report #514356 Posted June 21, 2013 at 07:16 PM Antes de criares o socket, verifica o valor da variável host. Experimenta também substituir localhost por 127.0.0.1. 1 Report Rui Carlos Gonçalves
Daminh_a Posted June 21, 2013 at 09:44 PM Author Report #514389 Posted June 21, 2013 at 09:44 PM Ainda continua com os mesmos erros....
Ernest Posted June 22, 2013 at 04:22 AM Report #514409 Posted June 22, 2013 at 04:22 AM 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); } }); } }
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now