[Duvida] Métodos next() e nextLine () da classe Scanner;

Boa noite pessoal do Forum GUJ.
Antes de nada gostaria de agradecer a comunidade por fornecer um excelente material para pessoas que estão interessadas em aprender Java. Com méritos é a maior e melhor comunidade de Java do Brasil.

Bom, pra começar estou com duvida.
É coisa bem simples creio eu.
O codigo abaixo funciona perfeitamente, só que estou com uma duvida na classe InvoiceTest, linha 31.
Eu tento usar o método nextLine() da classe Scanner, mas… o aplicativo da um erro de tempo de execução não fatal, termina e acabo não conseguindo inserir a String.

A pergunta é:

Porque não consigo usar o método nextLine() na linha 31 (class InvoiceTest)

Invoice.java

// Invoice.java
public class Invoice
{
   
   int numero, qtdItens;
   String descricao;
   double preco;

   public Invoice()

   {
      this.numero = 0;
      this.qtdItens = 0;
      this.preco = 0.0;
      this.descricao = null;

      System.out.printf("Numero do invoice: %d\nQuantidade de itens: %d\nPreco: %.2f\nDescricao: %s"
      , this.numero, this.qtdItens, this.preco, this.descricao);

   };//fim do construtor


   //set e get numero
   public void setNumero( int numero )
   {
      this.numero = numero;
   };

   public int getNumero()
   {
      return this.numero;
   };


   // set e get qtdItens
   public void setQtdItens(int qtdItens)
   {
      this.qtdItens = qtdItens;
   };  

   public int getQtdItens()
   {
      return this.qtdItens;   
   };


   //set e get preco
   public void setPreco(double preco)
   {
      this.preco = preco;
   };
   
   public double getPreco()
   {
      return this.preco;
   };


   //set e get descricao

   public void setDescricao(String descricao)
   {
      this.descricao = descricao; 
   };

   public String getDescricao()
   {
      return this.descricao;
   };


   //metodo getInvoiceAmount
   public double getInvoiceAmount()
   {
      if(this.qtdItens < 0)
         this.qtdItens = 0;

      if(this.preco < 0.0)
         this.preco = 0.0;

      double invoiceAmount = qtdItens * preco;
      
      return invoiceAmount;
       
   };//fim do metodo InvoiceAmount

};// fim da classe Invoice

InvoiceTest.java

[code]//InvoiceTest.java

import java.util.Scanner;

public class InvoiceTest
{
public static void main (String args[])
{

  Scanner input = new Scanner( System.in );

  System.out.println("***Modelo de Invoice***");
  Invoice invoice = new Invoice();
        

  System.out.println("\n\n\n*** Invoice ***");
  
  System.out.print("\n\nInsira o numero do Invoice:  ");
  int numero = input.nextInt();
  invoice.setNumero( numero );
  
  System.out.print("\nInsira o preco do produto: ");
  double preco = input.nextDouble();
  invoice.setPreco( preco );

  System.out.print("\nInsira a quantidade: ");
  int quantidade = input.nextInt();
  invoice.setQtdItens( quantidade );
  
  System.out.print("\nInsira a descricao do produto: ");
  String descricao = input.next();//***AQUI***
  invoice.setDescricao( descricao );

  System.out.println("\n\n***Detalhes da Fatura***");
  System.out.printf("Numero do invoice: %d\nQuantidade de itens: %d\nPreco: %.2f\nDescricao: %s\n\n\n"
  , invoice.getNumero(), invoice.getQtdItens(), invoice.getPreco(), invoice.getDescricao() );

  System.out.printf("Total da Fatura: %.2f\n\n",invoice.getInvoiceAmount() );

};// fim do metodo principal

}; // fim da classe InvoiceTest[/code]

Da uma olhada
http://forum.java.sun.com/thread.jspa?threadID=718569&messageID=4148209