Erro na Thread

8 respostas
L

Galera…
tenho um componente de envio de e-mail que é uma thread…

fiz para teste, ele disparar o e-mail quando eu acesso uma determinada página da minha aplicação…

o que ocorre é que da primeira vez ele envia certinho, mas quando acesso a página novamente, dá erro!

o erro é o seguinte…

java.lang.IllegalThreadStateException:null

o que pode ser??!

um abraço

8 Respostas

B

Ola,

Vc recria o objeto que tem a thread ou simplesmente tenta restartar ela?

L

então, teoricamente recrio, porque to usando resource…
ae não tenho certeza de como ele reage…

na primeira vez, o status da minha thread está new, mas na segunda, mesmo antes de dar o start ela tá terminated…

não sei bem porque… =/

abraço!

B

Simples,

vc não tá recriando o objeto, vc tá reiniciando a thread, e isto não pode, pois uma thread morta é uma thread morta… não rola de ressuscita-la,
olha o exemplo:

public class Exemplo{

	static int x = 0;
	
	public static void main(String[] args){
		Thread thread = new Thread(){
			public void run(){
				System.out.println("count da thread = "+(x++));
			}
		};
		
		
		thread.start();
		
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
		thread.start();// erro...
	}
}

Agora a qye não dá erro:

public class Exemplo{

	static int x = 0;
	
	public static void main(String[] args){
		Thread thread = new Thread(){
			public void run(){
				System.out.println("count da thread = "+(x++));
			}
		};
		
		
		thread.start();
		
		try {
			Thread.sleep(1000);
		} catch (InterruptedException e) {
			e.printStackTrace();
		}

		thread = new Thread(){
			public void run(){
				System.out.println("count da thread = "+(x++));
			}
		};
		thread.start();// ok
	}
}

Sacou o seu problema??? vc tem que reinstanciar o objeto que é a thread…

L

poutz cara… mas eu estou fazendo isso… ou pelo menos tentando… =P

segue o código…

Context initCtx = new InitialContext();
      Context envCtx = (Context) initCtx.lookup("java:comp/env");
      EnviaEmailThread mail = (EnviaEmailThread) envCtx.lookup("mail/EnviaEmail");
      mail.setEmail( "xx", "xx", "Subject", "Message" );
      /*aqui, na primeira aparece NEW, e na segunda TERMINATED*/
      System.err.println("State>>"+mail.getState() ); 
      mail.start();

me dê uma mãozinha ae rapazz…

um abraço!

B

Ola,

Este teu ejb é uma thread ou ele istancia uma thread?

pq a pergunta, vc pode fazer o trabalho da thread, que acho que é o que tá acontecendo, ou vc pode mandar a thread fazer pra vc…

O problema é que, a sua classe, ou que implemente, EnviaEmailThread estende de Thread, pode falar, se eu tiver falando m&%$@#… então quando vc invoca o lookup, o servidor cria uma istancia dela lá, no servidor, e a primeira vez funciona legal… na segunda… a classe já foi instanciada, então ela nãoi instancia denovo… sacou o problema aqui??? a thread já morreu…

L

ahhhh deve ser isso mesmoo!!

então eu deveria fazer esse meu lookup retornar uma outra classe, e de um método start() dela, por exemplo, eu instancio e aciono a Thread do e-mail??!

éé… acho que dá certo… =P

valeu cara!!

vou testar aqui…

um abraço!

B

Ola,

É por ae mesmo…

L

bele, deu certo…

valeu velho!!

um abraço

Criado 31 de julho de 2006
Ultima resposta 1 de ago. de 2006
Respostas 8
Participantes 2