Olá a todos,

    pessoal estou fazendo alguns testes iniciais com Threads, mas estou obtendo alguns resultados diferentes do que eu esperava. Tenho uma classe principal (com o método main) que na sua execução, instancia uma classe TesteThread que implementa Runnable.

A classe TesteThread tem uma propriedade String chamada txtDigit. O método run fica em loop infinito enquanto esta propriedade for diferente de zero (!txtDigit.equals("0")), dentro do loop, a propriedade recebe do teclado caracteres conforme sejam digitados.

A classe principal também fica em loop infinito pelo mesmo teste.

Acontece que na execução, a saída mostra o caractere inicializado na classe principal. Se você experimentar digitar algo no teclado, o caractere será mostrado uma vez só, ao invés de mudar de valor a partir de então.

Abaixo vai a implementação de cada classe. Alguém sabe explicar pq isso acontece?

 

import java.util.*;
import java.io.*;
import java.text.*;

class Keyboard
{
   static private BufferedReader reader = new BufferedReader( new InputStreamReader( System.in ) );

   public static String readString()
   {
      try
      {
        return Character.toString((Character.forDigit(reader.read(), Character.MAX_RADIX)));
      }
      catch ( Exception e )
      {
         System.out.println("Erro!");
         return "";
      }
   }
}

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

public class TesteThread implements Runnable
{
  String txtDigit;
 
  TesteThread(String letra)
  {
    this.txtDigit = letra;
  }
 
  public void run()
  {
    while (!txtDigit.equals("0"))
    {
      this.txtDigit = Keyboard.readString();
    }
  }

  public String getTxtDigit()
  {
    return txtDigit;
  }
}

------------------------------------------------------------------------------------------------------

------------------------------------------------------------------------------------------------------

 

public class Principal
{
  public static void main(String args[])
  {
    TesteThread t = new TesteThread("x");
    new Thread(t).start();
    while (! t.getTxtDigit().equals("0"))
    {
      System.out.print(t.getTxtDigit());
    }
  }
 
}

Muito Obrigado,

Júlio.



Busca Yahoo!
O serviço de busca mais completo da Internet. O que você pensar o Yahoo! encontra.

Responder a