Olá, estou fazendo um chat simples com frames e sockets, cliente/servidor no java, sou iniciante, estou assistindo aulas pelo youtube, acontece que as janelas dos dois frames apenas se comunicam quando quer, gostaria de saber se ja aconteceu com alguém e pode me ajudar ou me dá um “norte” para eu descobrir onde estou errando.
obrigada!
Chat java
9 Respostas
O que isso quer dizer exatamente, consegue ser mais específico?
Antes de testar com janelas (JFrames, eu suponho), testou o chat via linha de comando?
Que tutoriais está seguindo? Algum deles é do começo ao fim com janelas?
Abraço.
tipo, minha função é fazer dois Jframes se comunicar usando socket, mas acontece que o codigo só roda, ou seja, só se comunicam quando quer, já mudei algumas coisas, mas como sou iniciante, gostaria de descobri onde o erro está, pois no video em que assisti, o do cara roda de boa e no meu não, vou te mandar o link do video:
esse video me mostou um jeito muito facil de fazer esse chat, pois entendi os passos e ficará mais fácil de implementar mais funções pela frente me baseando nas dicas que esse cara explica, por isso gostaria de ajuda para resolver esse poblema de comunicação entre os Jframes!
obrigada!
O que você entende como “quando quer”?
Posta o código que você fez.
package mychat;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class Server extends javax.swing.JFrame {
static Socket s;
static ServerSocket ss;
static DataInputStream din;
static DataOutputStream dout; // Declaração das variáveis
public Server() {
initComponents();
}
@SuppressWarnings("unchecked")
private void msg_enviarActionPerformed(java.awt.event.ActionEvent evt) {
try{
String msg = "";
msg = msg_texto.getText();
dout.writeUTF(msg); //enviando a mensagem do servidor para o cliente
msg_texto.setText("");
}
catch (Exception e){
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Server().setVisible(true);
}
});
try {
String msgin = "";
ss = new ServerSocket(1201);// criação de servidor com soquete (numero da porta)
s = ss.accept(); // estabelece uma conexão pelo soquete
din = new DataInputStream(s.getInputStream()); // cria uma corrente de dados e aguarda a inserção
dout = new DataOutputStream(s.getOutputStream()); // cria uma corrente de saída de dados
while (!msgin.equals("exit")) {
msgin = din.readUTF();// transforma os dados inseridos em uma string
msg_area.setText(msg_area.getText() + "\n Cliente: " + msgin);
}
} catch (Exception e) {
}
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private static javax.swing.JTextArea msg_area;
private javax.swing.JButton msg_att;
private javax.swing.JButton msg_enviar;
private javax.swing.JTextField msg_texto;
// End of variables declaration
}
package mychat;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.net.ServerSocket;
import java.net.Socket;
import static mychat.Server.dout;
import static mychat.Server.s;
import static mychat.Server.ss;
public class Cliente extends javax.swing.JFrame {
static Socket s;
static DataInputStream din;
static DataOutputStream dout;
public Cliente() {
initComponents();
}
@SuppressWarnings("unchecked")
private void msg_enviarActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try{
String msg = "";
msg = msg_texto.getText();
dout.writeUTF(msg);//enviando a mensagem do cliente para o Sevidor
msg_texto.setText("");
}
catch (Exception e){
}
}
public static void main(String args[]) {
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
new Cliente().setVisible(true);
}
});
try {
String msgin = "";
s = new Socket("127.0.0.1", 1201); // cria um soquete (host, porta)
din = new DataInputStream(s.getInputStream());
dout = new DataOutputStream(s.getOutputStream());
while (!msgin.equals("exit")) {
msgin = din.readUTF();
msg_area.setText(msg_area.getText() + "\n Server: " + msgin);
}
} catch (Exception e) {
}
}
// Variables declaration - do not modify
private javax.swing.JScrollPane jScrollPane1;
private static javax.swing.JTextArea msg_area;
private javax.swing.JButton msg_att;
private javax.swing.JButton msg_enviar;
private javax.swing.JTextField msg_texto;
// End of variables declaration
}
Quando falo em “só pega quando quer”, por que quando coloco o código pra rodar, em vez de uma janela se comunicar com a outra toda vez que eu colocar o codigo pra rodar, elas não se comunicam, as vzs tenho que fechar o netbeans, abrir novamente, colocar o codigo pra rodar e ainda acontece dele nao rodar, só quando ele quer mesmo.
Primeiramente tira o static dos atributos das suas classes.
ok