Estou tendo algums problemas com conexão Socket e tal, eu tenho uma classe public class Impressora extends Thread
Logo que eu do this.start(), ela abre um ServerSocket em uma porta escolhida pelo usuário , dou um Accept() em um Socket e com um BufferReader eu aguardo uma conexão, quando eu abro um outro programinha faço a conexão com o PC que está Thread ai eu envio uma mensagem que o BufferRead recebe e executa alguns métodos…
Todo esse processamento está dentro de looping infinito, assim ele recebe a mensagem pelo Buffer executa e volta para o BufferedReader.readLine, e aguarda outra entrada, se eu deixo o programa da Thread e o que conecta nela ligado, funciona mto bem, mas quando eu fecho o programa que se conecta ao da Thread, o programinha da thread da o erro
java.lang.NullPointerException
Eu gostaria de saber como faço para continuar com o meu BufferReader rodando normalmente apos fechar a conexão do outro lado, assim eu poderia reiniciar a conexão quando eu precisa-se…
Eu pensava em parar o public void run(), e novamente dar o this.start() mas nem estou tendo sucesso ehehe
Se vc quer parar sua thread vc vai ter q colocar uma flag dentro do método run (no while por exemplo) e quando vc quer parar vc seta ela como false e o laco é quebrado
Cara derrepente a tua logica ta errada.
É o seguinte, a conexão é aguardada pelo accept do serversocket
o teu server socket fica no sleep no teu metodo Accept() e quando algum cliente conecta, daí sim ele continua e libera os streams.
ex.
while(true){
ServerSocket s = new ServerSocket(5000);
Socket socket;
socket = s.accept(); // aqui ele ficara parado até que algum cliente abra
//daí aqui embaixo tu obtem os streams e trabalha com os dados
logo apos tu fecha o socket e começa denovo
socket.close();
}
//derrepente tenha algum erro au no codigo mas é que fiz de cabeça sem compilador … mas a logica é essa
Os seus comentários vieram me ajudar muito, minha lógica errada não estava, só tava mal estruturada, eu tenho a mania de achar um problema ai posto no GUJ e fico já tentando consertar sem parar, na maioria das vezes o pessoal me responder enquanto eu vou fazendo e quase sempre consigo resolver meus problemas…
Valeu Pessu, e só para falar, eu coloquei a criação do ServerSocket e do Socket e o .accept() dentro de um try{} e no catch eu fechava tudo e reabria reiniciando o while… assim se desse erro ele desligava o ServerSocket e o Socket, e logo em seguida reiniciava o while que recriava meus sockets… ainda bem que funcionou mas nem de longe creio essa ser a melhor forma, hehehe
Só uma dica…
Na maior parte dos casos, é mais interessante implementar a interface Runnable do que estender a classe Thread.
Duas vantagens:
1 - Se vc implementar runnable, pode estender outra classe
2 - Ao contrário das threads, os objetos Runnable podem ser reutilizados (em uma nova thread)
Não estou familiarizado com as o Runnable, mas vou pesquisar na internet e não creio que seja dificil achar algo sobre, vou dar uma olhada nas API, mas se voce pussuir algum tutorial que ensine de uma forma clara a usar o Runnable eu agradeço…