Reiniciar uma Thread

8 respostas
MarceloFernandes

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 ?

8 Respostas

Java_Vinicius_Machin

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

davidbuzatto

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.

nbluis

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;

diego2005

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

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...
   }
}
MarceloFernandes

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

A

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

MarceloFernandes

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

diego2005

Vê se um exemplo simples te ajuda:

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(r);

      t.start();
   } 
}

Falow....t+

Criado 12 de agosto de 2006
Ultima resposta 14 de ago. de 2006
Respostas 8
Participantes 6