Galera estou com um problema ao tentar enviar mensagem via Socket. Basicamente estou usando um JFrame principal, um JFrame conexão, e uma classe Conexão_Socket, onde é criado o Socket para conexão e também métodos como Write() Read(). Acontece que depois que eu crio o objeto Conexão_Socket no JFrame conexão, e realizo a conexão através desse objeto, eu só consigo enviar e receber mensagens no JFrame conexão. Mesmo que eu crio outro objeto Conexao_socket em outro JFrame não da certo, da um erro : Exception in thread “AWT-EventQueue-0” java.lang.NullPointerException. Alguém pode me dar uma luz por favor ?
O erro não é por causa de thread nem socket. Deu um null pointer exception, só isso. Você está errando na hora de passar os objetos de um lugar pra outro.
Cadê o código? Tenta deixar o código o mais enxuto possível, tira as coisas que não tem nada a ver com o problema. Assim fica mais fácil ajudar.
public class Socket {
private java.net.Socket S;
private BufferedReader bin;
private BufferedWriter bout;
private PrintStream pout;
private int indLinha;
public Boolean connected(){
return this.S.isConnected();
}
public boolean desconected(){
return this.S.isClosed();
}
public void write(final String st){
this.pout.println(st);
}
public String Read() throws IOException, InterruptedException {
String buf ="";
while (!this.bin.ready()) {
}
//Thread.sleep(500L);
buf = this.bin.readLine();
return buf;
}
public void connect(final String st, final int porta) throws UnknownHostException, IOException {
this.S = new java.net.Socket(st, porta);
this.bin = new BufferedReader(new InputStreamReader(this.S.getInputStream()));
this.bout = new BufferedWriter(new OutputStreamWriter(this.S.getOutputStream()));
this.pout = new PrintStream(this.S.getOutputStream());
}
public void disconnect() throws UnknownHostException, IOException {
this.pout.flush();
this.bout.close();
this.bin.close();
this.S.close();
}
}
JFrame1:
public class JFrame1 extends javax.swing.JFrame {
Socket conexaoSocket = new Socket(); // Classe Socket do mesmo pacote.
public JFrame1() {
initComponents();
}
public void Conectar(){
conexaoSocket.connect(txtIp.getText(), Integer.parseInt(txtPorta.getText()));
}
public void Comandos(){
conexaoSocket.write(txtComando.getText());
String res = conexaoSocket.Read();
JOptionPane.showMessageDialog(this, res);
}
}
No JFrame2 eu só tenho o método Comandos(), porem se a conexão é feita pelo JFrame1 não funciona !!
Você quer compartilhar o mesmo socket entre os dois JFrame
s? Se sim, tem que usar o mesmo objeto.
Caso um crie o outro, o pai pode criar e passar o objeto pro filho.
Caso eles sejam independentes, tem que haver alguma outra classe que cria os dois, e então essa classe pode criar o socket e passar para os dois JFrame
.
Depende do que você está tentando fazer.
Sim, quero compartilhar o Socket entre os JFrames, usar o mesmo objeto !!
Aonde você cria os JFrame
s? Cria o socket lá e passar pro construtor dos JFrame
s.
Deu certo !! Obrigado Ivbarbosa, me falaram em outro tópico que tinha a ve com Thread , mas obrigado!!