Posso ter duas Threads na mesma classe ?[RESOLVIDO]

6 respostas
j.silvestre
public class CreatingKeyboardEvent {...

// metodos

  public  class  trataInputBuffer implements Runnable{  // classe interna

     public synchronized void run(){


    while(true){...

  ....

}

 public  class interpretaComandos implements Runnable{ // classe interna 

      public synchronized void run(){
     while(true){
       try{
   Thread.sleep(100);
     }catch(InterruptedException ex){ex.printStackTrace();}

}

/// metodo go...


  public void go(){
     trataInputBuffer job1 = new trataInputBuffer();
     Thread ler = new Thread(job1);
     ler.start();
     interpretaComandos job2 = new interpretaComandos();
     Thread verificarTeclas = new Thread(job2);
     verificarTeclas.start();

     }

o problema é o seguinte a Thread verificarTeclas não é executado…mas não da erro nem na compilação nem na execução… alguém tem uma luz ??

sds

j.silvestre

6 Respostas

maior_abandonado

coloca um System.out no loop do método run da sua “interpretaComandos”, se for o caso tira o synchronized e testa denovo. deveria chamar o método run e a thread ficar la sem fazer nada… como você viu que não a chamou?

j.silvestre

já tinha colocado

System.out.println("interpreta comandos"); //debug

mas não imprimiu nada…

sds

j.silvestre

maior_abandonado

o que acontece? o software inteiro fecha? nenhum erro? só executa a primeira thread e não a segunda?

coloca um System.out antes de

verificarTeclas.start()

e outro depois… deveria funcionar, ve ai se não está dando algum erro antes de iniciar a thrad… qualquer coisa amanhã eu tento te ajudar mais…

maior_abandonado

e ai… descobriu alguma coisa?

eliangela

Olá!

O que tem dentro do método run() da sua classe trataInputBuffer?

posta o código aí pra gente tentar ajudar

j.silvestre

Descobri…

o seguinte no metodo run da Thread eu tenho uns 20 if então a Thread ficava comparando os if só que eu coloquei uns return dentro do if, então a Thread rodava mas logo de cara ela encontrava
um return e morria. então eu tirei todos os returns. moral da história quando executava o return ele saia do while(true). foi erro de lógica.

sds

j.silvestre

Criado 14 de julho de 2011
Ultima resposta 15 de jul. de 2011
Respostas 6
Participantes 3