Problema com fila encadeada

To tentando implementar uma fila encadeada quanto eu insiro elemento blz, quando eu tiro as vezes da a exceção java.lang.NullPointerException e as vezes funciona normalmente

aqui está a classe fila

public class Fila {

  public Laco inicio;
  public Laco fim;
  public int tamanho;

  public Fila(){
  inicio=null;
  fim=null;
  tamanho=0;
  }
  public void entrar(String valor){
   Laco novo = new Laco(valor);
  if(tamanho ==0){
    inicio = novo;
    fim=novo;
  }
  else{
  novo.prox=fim;
  fim = novo;
  }
    tamanho++;
  }

  public String sair()throws Exception{
      if(tamanho==0){
      throw new Exception("Fila vazia");
      }
      else
      {
          if(tamanho==1){
              fim.prox=null;
              inicio=fim;
          }
      String v = inicio.dado;
      Laco aux = inicio;
      inicio=inicio.prox;
      aux=null;
      tamanho--;
      return v;
      }
  }


}

e a minha classe laço/nó/node

public class Laco {

    String dado;
    Laco prox;

    public Laco(){}

    public Laco(String v){
    this.dado=v;
    prox=null;
    }


}

Oi,

Acho que você poderia postar o seu código de testes também.

Pelo que vi do seu código, os lugares que poderiam gerar o null point seria:

  1. String v = inicio.dado, se inicio estiver com o valor null.
  2. inicio = inicio.proc, novamente, se inicio estiver com o valor null.

Mas a sua lógica está correta, a princípio, inicio estaria com valor null somente se tamanho estivesse com valor zero.

Possibilidades:

  1. Threads, as suas classes não estão preparadas para trabalhar com concorrência;
  2. Como suas propriedades são públicas, elas podem estar sendo modificadas fora do código apresentado.

pessoalmente, eu escreveria o seu método sair dessa forma:

public String sair() { if( inicio == null ) { throw new Exception("Fila vazia"); } else { Laco ret = inicio; inicio = inicio.prox; tamanho--; return ret.dados; } }

fw