Tenho uma classe que extende Thread, ela se conecta a um servidor e efetua o login no Run() como no código abaixo:
address = InetAddress.getByName(host);
connection = new Socket(address, port);
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
String msg = "Login:User:Senha\r\n";
out.write(msg);
out.flush();
Isso funciona normalmente, após este write e flush consigo mandar mais mensagens para o servidor com o write e o flush. O problema é que:
Preciso mandar outras mensagens nesta mesma classe porém fora do método Run(), mas sempre gera algum tipo de erro, alguem sabe o que pode ser?
Obrigado.
É pq a thread morre e os objetos declarados dentro do metodo run morrem tb.
Tente fazer o seguinte:
class abc extends Thread{
private BufferedWriter out = null;
//Aqui vão os outros objetos
//Instancia esses caras no construtor
abc(){
address = InetAddress.getByName(host);
connection = new Socket(address, port);
out = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream()));
}
public void enviaDados(String msg){
out.write(msg);
out.flush();
}
public void run(){
String msg = "Login:User:Senha\r\n";
enviaDados( msg );
while(true){
int read = out.read(buffer);
System.out.println( new String(buffer, 0, read) );
//Tem que circular com try...catch
Thread.sleep(100);
}
}
}
Pronto, agora vc pode chamar o metodo enviaDados em qualquer momento.
Dentro do metodo run é bacana colocar uma variavel de controle para quando vc mandar o sistema finalizar ele altera o estado desta variavel. Lembre-se de declarar esse flag como volatile senão outra thread não consiguirá muda-la.