Ola para todos!
Então camaradas… estou com um problema, preciso fazer um chat com Threads e Sockets! Estou utlizando um Thread somente no servidor inicializado somente quando a Texto a ser enviado pela ação do botão enviarButton na Classe Cliente, só que só funciona uma unica vez, nas outras vezes que escrevo no textArea e aperto no botão enviar ele não envia.
desde de já muito obrigado as camaradas que me derem uma mão
Código Classe Cliente:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JOptionPane;
import javax.swing.text.BadLocationException;
import javax.swing.text.Keymap;
public class Cliente extends javax.swing.JFrame implements Runnable {
private String nome = "Filipe";
private String chat;
private Socket conexao;
/** Creates new form Cliente */
public Cliente() throws UnknownHostException, IOException {
initComponents();
//nome = JOptionPane.showInputDialog("Entre com o Seu NickName:");
conexao = new Socket("127.0.0.1",5000);
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jScrollPane2 = new javax.swing.JScrollPane();
dialogText = new javax.swing.JTextArea();
panelMensag = new javax.swing.JPanel();
jScrollPane1 = new javax.swing.JScrollPane();
mensagText = new javax.swing.JTextArea();
panelDialog = new javax.swing.JPanel();
enviarButton = new javax.swing.JButton();
enviarArqButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
dialogText.setColumns(20);
dialogText.setRows(5);
dialogText.setEnabled(false);
jScrollPane2.setViewportView(dialogText);
getContentPane().add(jScrollPane2);
jScrollPane2.setBounds(10, 20, 380, 140);
panelMensag.setBorder(javax.swing.BorderFactory.createTitledBorder("Mensagem"));
mensagText.setColumns(20);
mensagText.setRows(5);
jScrollPane1.setViewportView(mensagText);
javax.swing.GroupLayout panelMensagLayout = new javax.swing.GroupLayout(panelMensag);
panelMensag.setLayout(panelMensagLayout);
panelMensagLayout.setHorizontalGroup(
panelMensagLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 388, Short.MAX_VALUE)
);
panelMensagLayout.setVerticalGroup(
panelMensagLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelMensagLayout.createSequentialGroup()
.addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 70, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
getContentPane().add(panelMensag);
panelMensag.setBounds(0, 170, 400, 100);
panelDialog.setBorder(javax.swing.BorderFactory.createTitledBorder("Dialogo"));
javax.swing.GroupLayout panelDialogLayout = new javax.swing.GroupLayout(panelDialog);
panelDialog.setLayout(panelDialogLayout);
panelDialogLayout.setHorizontalGroup(
panelDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 388, Short.MAX_VALUE)
);
panelDialogLayout.setVerticalGroup(
panelDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGap(0, 143, Short.MAX_VALUE)
);
getContentPane().add(panelDialog);
panelDialog.setBounds(0, 0, 400, 170);
enviarButton.setText("Enviar");
enviarButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
enviarButtonActionPerformed(evt);
}
});
getContentPane().add(enviarButton);
enviarButton.setBounds(150, 280, 80, 23);
enviarArqButton.setText("Enviar Arquivo");
getContentPane().add(enviarArqButton);
enviarArqButton.setBounds(250, 280, 120, 23);
pack();
}// </editor-fold>
private void enviarButtonActionPerformed(java.awt.event.ActionEvent evt) {
run();
}
/**
* @param args the command line arguments
*/
public static void main(String args[]) throws UnknownHostException, IOException {
Cliente cliente = new Cliente();
cliente.setVisible(true);
cliente.setSize(415,360);
cliente.setLocation(500, 300);
}
// Variables declaration - do not modify
private javax.swing.JTextArea dialogText;
private javax.swing.JButton enviarArqButton;
private javax.swing.JButton enviarButton;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JScrollPane jScrollPane2;
private javax.swing.JTextArea mensagText;
private javax.swing.JPanel panelDialog;
private javax.swing.JPanel panelMensag;
// End of variables declaration
public void run() {
chat = mensagText.getText();
dialogText.setText(dialogText.getText()+">"+nome+": "+chat+"\n");
try{
ObjectOutputStream saida = new ObjectOutputStream(conexao.getOutputStream());
//saida.writeObject(nome);
saida.writeObject(chat);
}catch (Exception e) {}
mensagText.setText("");
}
}
Código da Classe Servidor:
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Enumeration;
import java.util.Vector;
public class Servidor extends javax.swing.JFrame implements Runnable {
// private static Vector clientes;
private Socket conexao;
//private String meuNome;
/** Creates new form Servidor */
public Servidor(Socket c) {
initComponents();
conexao = c;
setVisible(true);
setSize(600, 400);
setLocation(500, 300);
//this.run();
}
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
panelDialog = new javax.swing.JPanel();
scrollDialog = new javax.swing.JScrollPane();
dialogText = new javax.swing.JTextArea();
panelConec = new javax.swing.JPanel();
scrollConec = new javax.swing.JScrollPane();
conecText = new javax.swing.JTextArea();
panelMensag = new javax.swing.JPanel();
scrollMensag = new javax.swing.JScrollPane();
mensagText = new javax.swing.JTextArea();
enviarButton = new javax.swing.JButton();
enviarArqButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
getContentPane().setLayout(null);
panelDialog.setBorder(javax.swing.BorderFactory.createTitledBorder("Dialogo"));
dialogText.setColumns(20);
dialogText.setRows(5);
scrollDialog.setViewportView(dialogText);
javax.swing.GroupLayout panelDialogLayout = new javax.swing.GroupLayout(panelDialog);
panelDialog.setLayout(panelDialogLayout);
panelDialogLayout.setHorizontalGroup(
panelDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelDialogLayout.createSequentialGroup()
.addContainerGap()
.addComponent(scrollDialog, javax.swing.GroupLayout.PREFERRED_SIZE, 380, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
panelDialogLayout.setVerticalGroup(
panelDialogLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelDialogLayout.createSequentialGroup()
.addComponent(scrollDialog, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
.addContainerGap())
);
getContentPane().add(panelDialog);
panelDialog.setBounds(0, 0, 410, 190);
panelConec.setBorder(javax.swing.BorderFactory.createTitledBorder("Usuarios Conec."));
conecText.setColumns(20);
conecText.setRows(5);
scrollConec.setViewportView(conecText);
javax.swing.GroupLayout panelConecLayout = new javax.swing.GroupLayout(panelConec);
panelConec.setLayout(panelConecLayout);
panelConecLayout.setHorizontalGroup(
panelConecLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelConecLayout.createSequentialGroup()
.addComponent(scrollConec, javax.swing.GroupLayout.DEFAULT_SIZE, 188, Short.MAX_VALUE)
.addContainerGap())
);
panelConecLayout.setVerticalGroup(
panelConecLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelConecLayout.createSequentialGroup()
.addComponent(scrollConec, javax.swing.GroupLayout.DEFAULT_SIZE, 152, Short.MAX_VALUE)
.addContainerGap())
);
getContentPane().add(panelConec);
panelConec.setBounds(410, 0, 210, 190);
panelMensag.setBorder(javax.swing.BorderFactory.createTitledBorder("Mensagem"));
mensagText.setColumns(20);
mensagText.setRows(5);
scrollMensag.setViewportView(mensagText);
javax.swing.GroupLayout panelMensagLayout = new javax.swing.GroupLayout(panelMensag);
panelMensag.setLayout(panelMensagLayout);
panelMensagLayout.setHorizontalGroup(
panelMensagLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelMensagLayout.createSequentialGroup()
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(scrollMensag, javax.swing.GroupLayout.PREFERRED_SIZE, 590, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap())
);
panelMensagLayout.setVerticalGroup(
panelMensagLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(panelMensagLayout.createSequentialGroup()
.addComponent(scrollMensag, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
);
getContentPane().add(panelMensag);
panelMensag.setBounds(0, 190, 620, 130);
enviarButton.setText("Enviar");
enviarButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
enviarButtonActionPerformed(evt);
}
});
getContentPane().add(enviarButton);
enviarButton.setBounds(250, 340, 90, 23);
enviarArqButton.setText("Enviar Arquivo");
getContentPane().add(enviarArqButton);
enviarArqButton.setBounds(390, 340, 110, 23);
pack();
}// </editor-fold>
private void enviarButtonActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
}
/**
* @param args the command line arguments
*/
public static void main(String args[]){
try{
ServerSocket s = new ServerSocket(5000);
while (true){
System.out.print("Esperando alguem se conectar...");
Socket conexao = s.accept();
System.out.print( "Conectou!");
Servidor servidor = new Servidor(conexao);
/*servidor.setVisible(true);
servidor.setSize(600, 400);
servidor.setLocation(500, 300);*/
servidor.run();
}
}catch (IOException e) { }
}
// Variables declaration - do not modify
private javax.swing.JTextArea conecText;
private javax.swing.JTextArea dialogText;
private javax.swing.JButton enviarArqButton;
private javax.swing.JButton enviarButton;
private javax.swing.JTextArea mensagText;
private javax.swing.JPanel panelConec;
private javax.swing.JPanel panelDialog;
private javax.swing.JPanel panelMensag;
private javax.swing.JScrollPane scrollConec;
private javax.swing.JScrollPane scrollDialog;
private javax.swing.JScrollPane scrollMensag;
// End of variables declaration
private void criar(){
}
public void run() {
// throw new UnsupportedOperationException("Not supported yet.");
try{
while(true){
ObjectInputStream entrada = new ObjectInputStream(conexao.getInputStream());
//String meuNome = (String)entrada.readObject();
//conecText.setText(">Usuario: "+meuNome);
// if (meuNome == null){
//return;
// }
//clientes.add(saida);
String linha = (String)entrada.readObject();
while (linha != null && !(linha.trim().equals(""))){
dialogText.setText(dialogText.getText()+" digitou :"+linha+"\n");
linha = (String)entrada.readObject();
}
// sendToAll(saida, " saiu ", "do chat!");
//clientes.remove(saida);
conexao.close();
}
}catch (Exception e) {}
}
/*public void sendToAll(ObjectOutputStream saida, String acao, String linha) throws IOException{
Enumeration e = clientes.elements();
while (e.hasMoreElements()){
ObjectOutputStream chat = (ObjectOutputStream) e.nextElement();
if (saida != chat)
chat.writeObject(meuNome + acao + linha);
}
}*/
}