Reiniciar uma Thread

Fala aeh Pessoal :smiley:

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

Alguem pode me AJuda ?

O código está muito grande? Que tal colocar aqui para o pessoal dar uma analisada?! :wink:

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

Ai instancia a thread de novo e da o start.

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

qualquer coisa avisa… valeu;

E você não pode chamar start() novamente em uma Thread, por exemplo:

[code]public class MyThread extends Thread
{
public void run()
{
System.out.println(“MyThread”);
}

public static void main(String[] args)
{
MyThread t = new MyThread();
t.start();

   t.start(); // será lançada uma exceção...

}
}[/code]

Obrigadão Pessoal,

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

Valeu pessu

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)

[]s

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…

E valeeuuu pela dia eheh

Vê se um exemplo simples te ajuda:

[code]public class MyRunnable implements Runnable
{
public void run()
{
System.out.println(“My Runnable”);
}

public static void main(String[] args)
{
MyRunnable r = new MyRunnable();
Thread t = new Thread®;

  t.start();

}
}[/code]

Falow…t+