Threads

Pessoal, sou iniciante em java e estou com uma dificuldade com threads, tenho a impressao que é bem simples de resolver porém com o que li sobre o assunto nao consegui. Tenho o seguinte:


Thread p = new MinhaTread();
p.start();
new Thread(new NumLetras(p.getP(), this.txtpa, this.lblpa));

O que quero é que a segunda Thread só comece após a Thread p morrer. Tem jeito?? Agradeço desde ja.

Ola…

utilize… p.join();

Pelo que tinha lido achei que era com o join, até tentei usar mas nao funcionou... voce pode ser mais especifico? Obrigado.

[quote=vdb]Ola…

utilize… p.join();[/quote]

Faca assim:

Thread p = new MinhaTread(); 
p.start(); 
try {
  p.join();
} catch (InterruptedException e) { }

new Thread(new NumLetras(p.getP(), this.txtpa, this.lblpa)).start();

“NumLetras” esta implementando Runnable ?
“MinhaThread” esta extendendo Thread ?

Se nao funcionar poste o erro.

ahemm… se vc vai fazer algo assim… pq simplesmente não usa uma única thread?

deu erro… eu vou melhorar o meu problema e talvez tenha uma solução mais eficiente. Tenho isso:

   new Thread(new NumLetras(JOptionPane.showInputDialog("Digite a palavra"), this.txtpa,this.lblpa)).start();
   new Thread(new PreencheBarra(this.txt1, this.barra)).start();
   new Thread(new PreencheBarra(this.txt2, this.barra1)).start();
   new Thread(new PreencheBarra(this.txt3, this.barra2)).start();
   new Thread(new PreencheBarra(this.txt4, this.barra3)).start();

O que acontence é que enquanto eu nao entro com a palavra as outras Threads nao iniciam até ai normal, mas o que preciso é que de algum jeito as outras Threads iniciem e aquela Thread aguarde até que eu entre com a nformação e depois inicie…O que tentei fazer antes foi outra Thread pedindo a palavra, inicialmente até funcionou porem a Thread que precisa da palavra inicia sem a palavra e da erro… a ideia de esperar aquela Thread terminar era pra isso.

[quote=vdb]Faca assim:

Thread p = new MinhaTread(); 
p.start(); 
try {
  p.join();
} catch (InterruptedException e) { }

new Thread(new NumLetras(p.getP(), this.txtpa, this.lblpa)).start();

“NumLetras” esta implementando Runnable ?
“MinhaThread” esta extendendo Thread ?

Se nao funcionar poste o erro.
[/quote]

A maneira mais fácil de resolver esse problema é atrás da classe Future e do ExecutionService. Tem um exemplo disso aqui:
http://www.guj.com.br/posts/list/50321.java#264645

Foi feito com Future, mas você pode usar Runnable, se suas threads não retornarem resultado.

Tente colocar o JOptionPane.showInputDialog fora da chamada da thread

String opcao = JOptionPane.showInputDialog("Digite a palavra");

new Thread(new NumLetras(opcao, this.txtpa,this.lblpa)).start(); 
new Thread(new PreencheBarra(this.txt1, this.barra)).start(); 
new Thread(new PreencheBarra(this.txt2, this.barra1)).start(); 
new Thread(new PreencheBarra(this.txt3, this.barra2)).start(); 
new Thread(new PreencheBarra(this.txt4, this.barra3)).start();

Colocando o JOptionPane antes da chamada fico na mesma, estou pesquisando sincronismo pra ver se consigo resolver com o join trava tudo.

[quote=vdb]Tente colocar o JOptionPane.showInputDialog fora da chamada da thread

String opcao = JOptionPane.showInputDialog("Digite a palavra");

new Thread(new NumLetras(opcao, this.txtpa,this.lblpa)).start(); 
new Thread(new PreencheBarra(this.txt1, this.barra)).start(); 
new Thread(new PreencheBarra(this.txt2, this.barra1)).start(); 
new Thread(new PreencheBarra(this.txt3, this.barra2)).start(); 
new Thread(new PreencheBarra(this.txt4, this.barra3)).start();

[/quote]

Você viu o link que eu coloquei ali em cima?!?

Vi rapidamente, agora no trabalho nao terei tempo de testar vou fazer em casa logo a noite qualquer coisa posto aqui novamente.